PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 144 / レーザーの多重反射

レーザー物理学では, "white cell"とはレーザー光線を遅延させるための鏡の装置のことである。光線はcellに入り,鏡で反射して最終的には飛び出す。white cell が楕円 4x^2 + y^2 = 100 の場合を考える。
−0.01 ≦ x ≦ +0.01 に対応する上部に穴が空いていて,光線が出入りできる。

f:id:variee:20170510023818g:plainf:id:variee:20170510023822g:plain


光線は white cell の外側(0.0,10.1)から始まり,最初に(1.4,-9.6)で鏡に反射する。光線は楕円の表面に当たるごとに反射の法則に従う。つまり,入射する光線と反射する光線は入射する点の法線に対して同じ角度をなす。

上の左の図では white cell と赤線で光線の最初に反射する2点を,青線で最初に反射する点の接線を示している。

与えられた楕円に対する点(x,y)での接線の傾き m は m=-4x/y である。光線はwhite cellから出るまでに何回反射するか?

Problem 144 - Project Euler


計算の精度が気になる問題ですが,特別な工夫は必要ありませんでした。

入射光,反射光,法線の偏角を p1, p2, q とすると p1+p2=2q から
 p_2=2q-p_1 \quad \therefore \tan p_2=\tan (2q-p_1)

手計算で解くなら加法定理を使って右辺を傾きで表すところですが,面倒だったので arctan を使いました。入射光,反射光,法線の傾きを m1, m2, m とおくと
 m_2 =\tan(2 \arctan m-\arctan m_1)

傾きがわかったら,次は交点です。Reduce コマンドで
y=m(x-a)+b と 4x^2 + y^2 = 100
の交点を求めました。

 x=\dfrac{a \left(m^2-4\right)-2 b m}{m^2+4},\, y=-\dfrac{8 a m+b \left(m^2-4\right)}{m^2+4}

これを繰り返し計算して −0.01 ≦ x ≦ +0.01, y>0 になるまでの回数を調べれば終わりです。