ふじさんのブログ

ふじさん技術研究本部

千人に一人がわかるような内容を書いていきます。

Processing で簡単なレンズのシミュレーターを作ってみる-算数の復習編

(2/13)タイトル変更 : 環境をNetBeansに変更したので、連載しません

ある日、友人に
「HUD作りたいんだけど、レンズの色の収差ってどのくらい?」
って聞かれました。


そもそもHUDとは無限の距離に焦点を結ばせて、
遠くのものとディスプレイ(透明)を重ねてしまおうっていうものだ。


もしそんな精密機器に収差なんぞあった日には、緑と赤の光がずれて表示されてしまう


というわけで前金として堅揚げポテトをもらい、シミュレーターを作ってあげることにした。
っていうか明日もテストなんですが...


それでは今回はレンズ(二次曲面)への光線の入射角を数式としてあらわしてみる。

収差ってなんだ...?

レンズは光を屈折させる道具だが、波長(色)によって屈折の度合いが変わってしまう。
要は、赤と青の光をレンズに通すとわずかにずれて出てくるのだ。


そこで、カメラでは大量のレンズを使って出来るだけ収差をなくそうとしている。

レンズの断面は曲線

レンズの断面は円形か二次曲線、と仮定する


もちろん光線は直線だから、レンズの曲線と光線が交わったら曲線を微分し傾きを求めて、
光線が出てくる角度を屈折角の公式から求めればいいのでは。

交点とその傾きの求め方

二つの線の交点を求めるには、2式の連立方程式を解けば良い。

{
\begin{eqnarray}
\left\{ \begin{array}{ll} 
  y=x^2-4x+5 & (1.レンズの曲線) \\
  y=2x-3 & (2.入射する光線)
\end{array}\right.
\end{eqnarray}
}

{
\begin{align}
\therefore~~&x=2,~4
\end{align}
}


ここでx=2,~4のときの(1)式の微分を求めてみる

{
f'(x)=2x-4 \\ 
f'(2)=0  (傾き0) \\ 
f'(4)=4  (傾き4)
}

となる

傾きを角度(degree)に直す

傾きから角度を求めるためには、
tan\theta=傾き
を満たす\thetaを求めれば良い。


つまり、傾きが与えられている場合
Tan^{-1}(傾き)=\theta で求められる。*1

例)Tan^{-1}(1)=45 傾き1の角度は45°


ここでは傾き0と4の角度を求めたいので
Tan^{-1}(0)=0° \\ Tan^{-1}(4)=75.964...°
となるのだが、光の媒質に対する入射角iを求めるには、
光の角度-媒質の境界の角度 でいいと思う。


この例では直線を光線、曲線を媒質との境界線とする。
二つの角度差(入射角)は、
Tan^{-1}(4)-Tan^{-1}(2)=12.529...°

f:id:fujisan14153:20161201224609p:plain
 図)交点 (4, 5) における y=x^2-4x+5 の二次曲線と y=2x-3 の直線がなす角度は約12.5°

これでレンズの曲線と光線とがなす角度(入射角)を求めることができた。


次回はレンズの屈折をやっていこうと思います。

(2/13)追記 : ProcessingからNetBeansに変更したので、連載しません。

*1:本来は{\displaystyle\begin{equation}\frac{1}{tan\theta}\end{equation}}と区別するためArctan\thetaと表記すべきであるが、高校数学にならってTan^{-1}\thetaとした。