Mathematica/ミラー光学系 のバックアップソース(No.2)
更新[[公開メモ]] * 概要 [#kbe64dd4] ミラー光学系の収差を Mathematica を使って計算してみる。 * 前提 [#qee47a20] まずは収差のない場合のおさらいから。 ** 焦点距離と曲率 [#id49bd6c] &attachref(1.png,,20%); 曲率が &math(y=ax^2); で表わされる凹面レンズの &math(x); の位置に垂直に平行光が入射するとき、 反射面の傾きは &math(y'=2ax); なので、小角近似では &math(\theta=2ax); 入射光は &math(2\theta); だけ曲がって反射されるので、 &math(f=\frac{x}{\tan 2\theta}=\frac{x}{2\theta}=\frac{x}{4ax}=\frac{1}{4a}); すなわち、焦点距離は &math(f=\frac{1}{4a}); となる。 ** 曲率と曲率半径 [#p92825da] 原点を通る半径 &math(r); の円 &math(x^2+(y-r)^2=r^2); を &math(y); について &math(x); の小さなところで解くと、 &math(y=-\sqrt{r^2-x^2}+r=-r\sqrt{1-x^2/r^2}+r=-r(1-x^2/2r^2)+r=x^2/2r); したがって、曲率半径 &math(r); に対して、&math(a=1/2r); となり、焦点距離は &math(f=1/4a=r/2); となる。 ** 点光源からの光を集光する [#h3417899] &attachref(2.png,,20%); 凹面鏡の中心軸上、&math(f_1); の距離に置かれた点光源から、 凹面鏡上の &math(x); の位置に到達する光が法線から &math(\phi); だけずれているとすると、 &math(x/f_1=\tan\phi=\phi); の関係がなりたつ。平面鏡であればこの光は反射角 &math(\phi); で反射されるが、 凹面鏡の傾きが &math(\theta); であれば、実際の反射角は &math(2\theta-\phi); となる。 このようにして中心軸上に集められる光の焦点位置 &math(f_2); は、 &math(f_2=\frac{x}{\tan(2\theta-\phi})=\frac{x}{2\theta-\phi}=\frac{x}{4ax-x/f_1}=\frac{f_1}{4af_1-1}); となるから、 &math(4af_1f_2=f_1+f_2); &math(\frac{f_1f_2}{f_1+f_2}=\frac{1}{4a}=f); の関係が得られる。 ** 斜め入射の場合 [#cbf6dfd6] 中心線に対して &math(\phi); の角度で入射する平行光に対する焦点位置を考える。 &attachref(3.png,,20%); 中心位置で反射される光は反射角 &math(\phi); で反射される 位置 &math(x); で反射される光は反射角 &math(\phi+2\theta); で反射される これらの光の為す角は &math(2\theta); だから、色を付けた三角形を考えることで、 &math(f'=\frac{x\cos\phi}{2\theta}=\frac{x\cos\phi}{4ax}=\frac{\cos\phi}{4a}=f\cos\phi); となって、&math(\cos\phi); のファクターだけ焦点距離が短くなる。 一方で入射面に垂直な方向の焦点距離は変わらないから、 入射面内での光の収束位置と入射面に垂直な方向への光の収束位置とがずれてしまうことになる。 すなわち凹面鏡への斜め入射は大きな収差(非点収差)を生むことになる。 この収差を無くすため、斜め入射で用いるための凹面鏡は入射面内の曲率半径と、 垂直方向の曲率半径を &math(\cos\phi); だけ違えて設計され、トロイダル凹面鏡などと呼ばれる。 トロイダル凹面鏡の面は数学的にはドーナツ面(トーラス面)の側面として表せる。 * 数値計算で確かめてみる [#tb9d514a] 以下は Wolfram Mathematica 9.0 による結果です。 まずはトーラス面(ドーナツ面、トロイダル面)を作成してみます。 パラメータ表示 &math(\left\{\begin{matrix} x=o_x+r_1\cos s+r_2\cos t\cos s\\ y=o_y+r_1\sin s+r_2\cos t\sin s\\ x=o_z+r_2\sin t\\ \end{matrix}\right .); と、 方程式表示 &math((\sqrt{(x-o_x)^2+(y-o_y)^2}-r_1)^2+(z-o_z)^2=r_2^2); (* ドーナツ面のパラメータ表示 *) (* r1=0 で球面を表わせる *) torusPar[m_,s_,t_]:= Module[{o,r1,r2,ss,tt}, {o,r1,r2,srange,trange}=m; ss = s srange[[1]] + (1-s) srange[[2]]; tt = t trange[[1]] + (1-t) trange[[2]]; o + { r1 Cos[ss]+r2 Cos[tt] Cos[ss], r1 Sin[ss]+r2 Cos[tt] Sin[ss], r2 Sin[tt] } ] (* ドーナツ面の方程式表示 *) (* r1=0 で球面を表わせる *) torusEq[m_] := Module[{o, r1, r2, sr, tr, d}, {o, r1, r2, sr, tr} = m; (Sqrt[(x - o[[1]])^2 + (y - o[[2]])^2] - r1)^2 + (z - o[[3]])^2 == r2^2 ] (* どちらも引数 m には、 - o: 中心位置 - r1: 半径1 ( = 0 なら球になる) - r2: 半径2 - sr: パラメータ s の範囲 - tr: パラメータ t の範囲 をリストにした物を与える *) 試しに表示してみると、 With[ {m = {{0, 0, 0}, 3, 1, {0, 2 Pi}, {0, 2 Pi}}}, { ParametricPlot3D[torusPar[m, s, t], {s, 0, 1}, {t, 0, 1}], ContourPlot3D[Evaluate[torusEq[m]], {x, -4, 4}, {y, -4, 4}, {z, -4, 4}] }] &attachref(4.png);
Counter: 17795 (from 2010/06/03),
today: 4,
yesterday: 0