下のプログラムがうまく動かない、という人はSUNのjavaの広場のページにいってjavaをダウンロードしてインストールしてみてください。動きが止まってしまった場合、windowをいったん最小化してからまた開くと動き出す場合があるようです。
初期状態ではV_0=0になっている。つまり位置エネルギーに差がないので、反射は起きず、入射して来た波がそのまま透過していく。下のスライドバーを左に動かすとV_0<0となり、右に動かすとV_0>0となる。右に動かし過ぎると位置エネルギーが大きくなって波が右へ透過することができなくなる。しかし少しだけは入り込んでいる。
V_0<0の場合、透過した波は位置エネルギーの低い場所に来たことになるので、結果として運動エネルギーが増加している。ということは運動量も大きくなる。結果として波数kが大きくなり、つまりは波長が縮んでいる。この時、反射波は反転して跳ね返る。つまり入射波の「山」が入ると反射波の「谷」が出てくる。アニメーションで確認して欲しい。
逆にV_0>0の場合、透過した波は位置エネルギーの高い場所に来たことになるので、結果として運動エネルギーが減少し、運動量も小さくなる。結果として波数kが小さくなり、波長がのびている。この時、反射波はそのままの位相で跳ね返る。つまり入射波の「山」が入ると反射波の「山」が出てくる。
なお、このプログラムの理論的背景については、「量子力学」講義録第7回を参照。
ソースコード(touka.java)。その下請けクラスのソースコード(AnimeCanvas.java)