raytracing
前回、raytracingライブラリのAperture、CurvedMirror、DielectricInterface、DielectricSlabの使い方を紹介しました。

今回はraytracingライブライのObjectRays関数を使って光線を設定する方法を紹介します。
光線を設定する方法としては前にImagingPathに追加する方法を紹介しました。

ただこの方法には欠点があって、何らかの拍子に表示方法が勝手に変わってしまいます。
例えばあるレンズの光線解析を行いたいとともい、こんな光学設計をしたとします。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.append(ThickLens(n=1.517, R1=24.5, R2=-24.5, thickness=9.0))
path.append(Space(d=20))
path.display()
実行結果

光線解析ができているので、これでよしよしと思い、さらに実際の光学設計に近づけるためにレンズの直径を入れるとこんな感じになります。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.append(ThickLens(n=1.517, R1=24.5, R2=-24.5, thickness=9.0, diameter=25.4))
path.append(Space(d=20))
path.display()
実行結果
BeginnerHint [in imagingpath.py]: No rays were provided for the
display. Using principal and axial rays.

どうやら「表示すべき光線がないので、主光線と軸上光線を使用した」とのことらしいです。
私も光学に詳しいわけではないので間違っているかもしれませんが、主光線とはレンズを通る光線の真ん中の光線のことを言い、軸上光線とは軸上の点から出ている光線の様です。
その2つだけを表示したのが2つ目の画像というわけです。
しかし詳しく光線解析をしたいのに、2本だけ出されても全然情報としては足りません。
そこでObjectRaysを用いると出力される図を最初の図(Object/Image)に固定することができます。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.append(ThickLens(n=1.517, R1=24.5, R2=-24.5, thickness=9.0, diameter=25.4))
path.append(Space(d=20))
path.display(ObjectRays(diameter=5, halfAngle=np.radians(1)))

ということでraytracingライブラリを用いる場合は覚えておいて損がないと思いますので、今回はobjectRaysの使い方として、どういったパラメータを変更可能か紹介します。
それでは始めていきましょう。
objectRaysの使い方:diameterの設定
まずobjectRaysの使い方として、「path = ImagingPath()」で光路を作り、最後に「path.display()」で表示しますが、その最後の「path.display()」の引数として設定します。
つまり「path.display(objectRays())」という形です。
そしてobjectRaysで必須の引数としては「diameter」、つまり光源の直径です。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.display(ObjectRays(diameter=5))
実行結果

halfAngleの設定
ここからはオプションの引数です。
最初はhalfAngleで光源の各点から出ている光線の幅です。
角度の指定はラジアンなので、NumPyの「np.radians()」で角度をラジアンに変更して使うと分かりやすいです。
from raytracing import *
import numpy as np
path = ImagingPath()
path.append(Space(d=10))
path.display(ObjectRays(diameter=5, halfAngle=np.radians(10)))
実行結果

ただしこれは前に紹介した「path.fanAngle()」と同様の意味のようです。
光線の点の数の設定
光線の点の数を設定するには「objectRays()」の引数に「H=光線の点の数」を追加します。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.display(ObjectRays(diameter=5, H=10))
実行結果

光線の線の数の設定
光線の各点からの線の数を設定するには「objectRays()」の引数に「T=光線の線の数」を追加します。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.display(ObjectRays(diameter=5, T=10))
実行結果

光線の線の色の設定
光線の線の色を設定するには「objectRays()」の引数に「rayColors=色のリスト」を追加します。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.display(ObjectRays(diameter=5, rayColors=["Black", "Purple", "Orange"]))
実行結果

光線のラベルの設定
光線にラベルを設定するには「objectRays()」の引数に「label=ラベル」を追加します。
from raytracing import *
path = ImagingPath()
path.append(Space(d=10))
path.display(ObjectRays(diameter=5, label="object"))
実行結果

次回は同じくraytracingの光源の設定でUniformRays、RandomUniformRays、LambertianRays、RandomLambertianRaysを紹介します。
ではでは今回はこんな感じで。
コメント