Opticalpy
前回、光線解析ライブラリOpticalpyのレンズの設定方法を紹介しました。

今回はOpticalpyで回折格子の設定方法を紹介します。
また今回は回折格子ということで、波長毎に反射後や透過後の角度が変わりますので、まずは複数の波長を含んだ光源をこんな感じで設定しました。
import opticalpy as op
import numpy as np
scene = op.Scene(xlim=(-50, 250), ylim=(-100, 100))
beam = op.elems.DivergingBeam(angle=20, wavelength=np.arange(450, 701, 10), scene=scene)
scene.plot()
実行結果

光線が黒色に見えますが、この中に450 nmから700 nmまで10 nm刻みの波長が含まれています。
この光源を使って、Opticalpyに含まれる回折格子を置いてみるとどうなるか見てみましょう。
それでは始めていきましょう。
Grating
最初は「op.elems.Grating」で設定できる反射型の回折格子です。
「Grating(aperture=回折格子のサイズ, period=回折格子のピッチ, scene=シーン, origin=[Xの位置, Yの位置], rotation=回折格子の角度)」として設定します。
import opticalpy as op
import numpy as np
scene = op.Scene(xlim=(-50, 250), ylim=(-100, 100))
beam = op.elems.DivergingBeam(angle=20, wavelength=np.arange(450, 701, 25), scene=scene)
grating = op.elems.Grating(aperture=50, period=500, scene=scene, origin=(200, 0), rotation=60)
scene.plot()
実行結果

ちなみに回折格子のピッチ「period」を変えると反射光がこんな感じに変わります。
import opticalpy as op
import numpy as np
scene = op.Scene(xlim=(-50, 250), ylim=(-100, 100))
beam = op.elems.DivergingBeam(angle=20, wavelength=np.arange(450, 701, 25), scene=scene)
grating = op.elems.Grating(aperture=50, period=1500, scene=scene, origin=(200, 0), rotation=60)
scene.plot()
実行結果
TransmissionGrating
「op.elems.TransmissionGrating」は透過型の回折格子です。
「TransmissionGrating(aperture=回折格子のサイズ, period=回折格子のピッチ, scene=シーン, origin=[Xの位置, Yの位置], rotation=回折格子の角度)」として設定します。
import opticalpy as op
import numpy as np
scene = op.Scene(xlim=(-50, 250), ylim=(-100, 100))
beam = op.elems.DivergingBeam(angle=20, wavelength=np.arange(450, 701, 25), scene=scene)
grating1 = op.elems.TransmissionGrating(aperture=50, period=1000, scene=scene, origin=(100, 0), rotation=70)
scene.plot()
実行結果

RefractionGrating
「op.elems.RefractionGrating」は屈折型の回折格子(?)のようで、多分条件によって反射がメインとなったり、透過がメインとなったりするのだと思われます。
「RefractionGrating(aperture=回折格子のサイズ, period=回折格子のピッチ, scene=シーン, origin=[Xの位置, Yの位置], rotation=回折格子の角度)」として設定します。
import opticalpy as op
import numpy as np
scene = op.Scene(xlim=(-50, 250), ylim=(-100, 100))
beam = op.elems.DivergingBeam(angle=20, wavelength=np.arange(450, 701, 25), scene=scene)
grating1 = op.elems.RefractionGrating(aperture=50, period=1000, origin=(100, 0), rotation=70, scene=scene)
scene.plot()
実行結果

次回はOpticalpyで波長フィルタ、ダイクロイックミラーの設定方法を紹介します。
ではでは今回はこんな感じで。
コメント