マニュアル: D:/git/sphinx/tkProg/source/tiny_simulations/interfere.py
プログラムの動作
本プログラムの目的は、2つの点光源から発生する波の干渉現象をシミュレーションし、3Dアニメーションとして可視化することです。
主な機能は以下の通りです。
空間上の各点における2つの波の複素振幅を計算し、波の重ね合わせ(干渉波)を合成します。
合成された波の実部を3Dサーフェスプロットとして描画し、時間の経過に伴う波の伝播をアニメーションでリアルタイムに表示します。
スクリーンに相当する特定の位置(\(y = 5\))における波の強度(振幅の絶対値の2乗)を抽出し、等高線として追加描画します。
このプログラムは、ヤングの干渉実験などに代表される「波の干渉」という物理現象を、視覚的かつ直感的に理解するという課題を解決します。
原理
本プログラムのシミュレーションは、波の伝播と重ね合わせの原理に基づいています。
各点光源から生じる球面波(本プログラムでは2次元平面上の円形波)は、複素数を用いて以下の式で表されます。
ここで、各変数は以下の物理量を示します。
\(k\): 波数 (\(2\pi\) m\(^{-1}\))
\(\omega\): 角周波数 (\(2\pi\) rad/s)
\(r\): 光源からの直線距離
\(t\): 時間
2つの光源の位置をそれぞれ \((x_1, y_1)\), \((x_2, y_2)\) とし、空間上の任意の観測点を \((x, y)\) とすると、各光源からの距離 \(r_1, r_2\) は次のように計算されます。
重ね合わせの原理により、空間内の任意の点における合成波 \(\Psi\) は、各波の足し合わせとなります。
アニメーションの3D曲面として描画されるのは、この合成波 \(\Psi\) の実部 \(\text{Re}(\Psi)\) です。 また、スクリーン上(\(y = 5\))に生じる干渉縞の強度(明るさ) \(I\) は、合成波の振幅の絶対値の2乗として以下の式で求められます。
必要な非標準ライブラリとインストール方法
本プログラムを実行するには、数値計算とグラフ描画のための非標準ライブラリが必要です。
以下の pip コマンドを使用してインストールしてください。
pip install numpy matplotlib
必要な入力ファイル
本プログラムの実行にあたり、外部からの入力ファイルは必要ありません。 シミュレーションに必要な光源の位置、波数、角周波数、時間ステップなどのパラメータは、すべてソースコード内に直接記述されています。
生成される出力ファイル
本プログラムは、実行時に別ウィンドウを開いてアニメーションを画面上に直接描画・再生します。 画像ファイル(PNGなど)や動画ファイル(MP4など)の自動保存や生成は行いません。
コマンドラインでの使用例 (Usage)
本プログラムは実行時引数を必要としません。ターミナルやコマンドプロンプトから以下のコマンドを実行してください。
python D:/git/sphinx/tkProg/source/tiny_simulations/interfere.py
コマンドラインでの具体的な使用例
外部からの引数による操作はないため、基本的な実行コマンドをそのまま入力します。
python D:/git/sphinx/tkProg/source/tiny_simulations/interfere.py
実行結果の説明: コマンドを実行すると、Matplotlibによる3Dグラフのウィンドウが立ち上がり、以下のアニメーションが再生されます。
\(x\) 軸上の \((-1, 0)\) に赤い点(Source 1)、\((1, 0)\) に青い点(Source 2)が描画され、これが2つの光源を表します。
光源から発生した波が交わりながら \(y\) 軸の正の方向へ広がっていく様子が、青色の波打つ3D曲面として動的に表示されます。
\(y = 5\) の壁面(スクリーン)に沿って、波の干渉によって強め合う場所と弱め合う場所が赤色〜黄色の等高線(ホットカラーマップ)でマッピングされ、干渉縞の様子を確認できます。
アニメーションは一定時間(\(t_{\text{max}} = 10\))分計算され、表示されます。ウィンドウを閉じるとプログラムが終了します。