raytracing
前回、raytracingライブラリで光源の設定:サイズ、位置、角度、光源数、光線数の変更を紹介しました。

今回はraytracingライブラリでLensとThickLensの使い方と焦点の取得方法を紹介します。
それでは始めていきましょう。
Lens
Lensは非常に簡単にレンズを配置することができ、最低限としては焦点距離(f)を引数に与えるだけでレンズを配置出来ます。
つまり「Lens(f=焦点距離)」だけでレンズを作成することができます。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.append(Lens(f=10))
path.append(Space(d=20))
path.display()
実行結果

他に与えられる引数としては「diameter=直径」と「label=ラベル」があります。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.append(Lens(f=10, diameter=20, label="LABEL"))
path.append(Space(d=20))
path.display()
実行結果

またLensをprint関数で表示するとABCD行列が表示されます。
from raytracing import *
Lens = Lens(f=10, diameter=20)
print(Lens)
実行結果
| 1.000 0.000 |
| |
| -0.100 1.000 |
f=10.000
ここで焦点距離(f)が表示されますが、詳細は分かりません。
焦点距離を取得するには「Lens.effectiveFocalLengths()」、もしくは「Lens.focalDistances()」、フロント側の焦点距離を取得するには「Lens.frontFocalLength()」、バック側の焦点距離を取得するには「Lens.backFocalLengths()」を用います。
from raytracing import *
Lens = Lens(f=10, diameter=20)
print(Lens.effectiveFocalLengths())
print(Lens.focalDistances())
print(Lens.frontFocalLength())
print(Lens.backFocalLength())
実行結果
FocalLengths(f1=10.0, f2=10.0)
FocalLengths(f1=10.0, f2=10.0)
10.0
10.0
あとでも出てきますが、これで全部前後の焦点距離が出ている様に見えますが、実は「Lens.effectiveFocalLengths()」、「Lens.focalDistances()」のf1、f2は同じ値が表示されます。
そのため前後の焦点距離を知りたい場合は「Lens.frontFocalLengths()」と「Lens.backFocalLengths()」を用います。
Lens()を使った場合はレンズの形状が出てきませんが、「f」を正の数にすると両凸レンズに、「f」を負の数にすると両凹レンズになります。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.append(Lens(f=-10))
path.append(Space(d=20))
path.display()
実行結果

ThickLens
もう少し複雑なレンズを作成したい場合は、ThickLensを使います。
ThickLensでは「屈折率n」、「入射側の曲率R1」、「出射側の曲率R2」、「厚みthickness」を引数に与えます。
そのため「ThickLens(n=屈折率, R1=入射側の曲率, R2=出る射側の曲率, thickness=厚み)」とします。
ちなみにthicknessはレンズの中心、いわゆる一番厚い場所の厚みです。
from raytracing import *
path = ImagingPath()
path.append(Space(10))
path.append(ThickLens(n=1.5, R1=2.5, R2=-5, thickness=5))
path.append(Space(30))
path.display()
実行結果

ThickLensの場合はこの様にレンズの形状が表示されるので、光学系として分かりやすいです。
ThickLensでもprint関数でABCD行列が取得できますし、「Lens.effectiveFocalLengths()」と「Lens.focalDistances()」、「Lens.frontFocalLengths()」と「Lens.backFocalLengths()」を使うこともできます。
from raytracing import *
Lens = ThickLens(n=1.5, R1=2.5, R2=-5, thickness=5)
print(Lens)
print(Lens.effectiveFocalLengths())
print(Lens.focalDistances())
print(Lens.frontFocalLength())
print(Lens.backFocalLength())
実行結果
| 0.333 3.333 |
| |
| -0.233 0.667 |
f=4.286
FocalLengths(f1=4.285714285714285, f2=4.285714285714285)
FocalLengths(f1=4.285714285714285, f2=4.285714285714285)
2.8571428571428568
1.4285714285714288
このThickLensを使うと、両凸レンズや両凹レンズだけでなく、平凸レンズや平凹レンズを作成もできますし、メニスカスレンズを作ったりもできます。
平凸レンズや平凹レンズを作成するには、平にしたい方のRを大きな値、例えば1000とか10000とかにします。
from raytracing import *
path = ImagingPath()
path.append(Space(10))
path.append(ThickLens(n=1.5, R1=2.5, R2=1000, thickness=5))
path.append(Space(30))
path.display()

from raytracing import *
path = ImagingPath()
path.append(Space(10))
path.append(ThickLens(n=1.5, R1=-2.5, R2=1000, thickness=5))
path.append(Space(30))
path.display()
実行結果

メニスカスレンズを作成する場合は曲率を同じ方向にします。
from raytracing import *
path = ImagingPath()
path.append(Space(10))
path.append(ThickLens(n=1.5, R1=2.5, R2=1.5, thickness=5))
path.append(Space(30))
path.display()
実行結果

次回はこのThickLensを使ってThorlabsのレンズをいくつか作ってみましょう。
ではでは今回はこんな感じで。
コメント