Engee 文档
Notebook

镜头型号

让我们来描述一下透镜模型,给出光学系统的特性,并评估平行光线是如何通过透镜的。

问题描述

我们将创建一个透镜和表面模型。光线将在空气中传播(空气的折射率等于1.0 ),然后穿过一个球面,球面的光学中心位于1 (坐标没有维度,用户可以用任何系统表示)。第一个球面的半径等于6.0 。然后,光线穿过折射率为1.5 (玻璃)的材料,直至到达位于 Z 轴坐标2 、半径为-6 的第二个球面。穿过第二个球面后,光束再次穿过空气,到达位于 Z 轴坐标8 处的球面。

在这项工作中,我们将使用计算几何光学问题的软件包GeometricalOptics

In [ ]:
Pkg.add( url="https://github.com/airspaced-nk5/GeometricalOptics.jl#master" )

透镜和限制光线传播的墙壁的几何形状定义如下:

In [ ]:
using GeometricalOptics

funcsList = [spherical, spherical, zplane]    # объекты на пути луча
coeffsList = [[1., 6.], [2., -6.], [8.]]      # свойства объектов
nList = [1., 1.5, 1.]                         # индексы рефракции

optSta = opticalstack( coeffsList, funcsList, nList );

我们可以看到,系统中有三个物体:两个球面spherical (发生折射)和一个平面zplane

折射系数是光在穿过下一个边界(由列表funcsList 中的相应对象给出)之前**通过的介质的系数。在我们的例子中,第一个系数描述的是透镜前的空间*。

库中的对象spherical 由函数spherical( x, y, coeffs=[zpos,signed_radius] ) 定义,其中zpos 是对象在光轴上的位置,signed_radius 是表面的曲率半径。

用户可以创建自己的函数,并将其用于光学系统的定义。例如,函数my_ytilt(x,y,coeffs)=coeffs[1]+coeffs[2]*y 将创建一个倾斜平面的描述,其在 Z 轴上的位置由第一个系数定义,在 Y 轴上的倾斜度由第二个系数定义。

创建射线源

创建平行光束的最简洁方法是使用函数bundle(x,y,angx,angy,zpos) 。此外还有其他函数,例如bundle_as_array ,它可以创建横截面为圆形的光束。

函数bundle 接收参数x,y,zpos (光束中心位置)和angx,angy (光束中射线沿 X 轴和 Y 轴的发散,以弧度为单位)。每个参数都可以用矢量指定,因此下面的命令可以创建一个射线梳。

In [ ]:
test_bundle = bundle( [0.], (-1:0.2:1), 0., 0., 0. );

每条射线都从坐标为X=0Z=0 的点开始,我们总共创建了 11 条射线,坐标从-11 ,间距为0.2

图形的计算和输出

该系统可生成多种不同的图表。

光束曲率特征

我们有1 源表面和k 表面,因此我们可以通过k+1 找出任意两个表面之间的光束坐标关系。

如果我们简单地将光束test_bundle 传递给对象optSta"光学堆栈 "),并使用函数rac 显示图形,我们将得到一条曲线。

In [ ]:
trace1 = optSta( test_bundle )
rac( trace1, 1, 4 )
Out[0]:

下面是光束中每条射线在第四表面(坐标轴Y )上的坐标与其在第一表面(坐标轴X )上的坐标的关系图。

rms_spot 命令将返回光束在光学系统最后一个表面上的散射均方根值(如果调用该命令时没有附加参数)。

In [ ]:
rms = rms_spot( trace1 )
Out[0]:
0.03846450937451718

二维射线传播图

如果我们不仅向对象optSta 传递源特征test_bundle ,还传递参数rend ,我们将在输出中得到一个二维(或三维)图形。

In [ ]:
p_lens = optSta( test_bundle; rend = "YZ" )
Out[0]:

请尝试使用此命令的可能参数,以获得不同的图形(为加快渲染速度,我们将图形转换为gr() 格式)。

In [ ]:
gr()
Out[0]:
Plots.GRBackend()
In [ ]:
rend = "3Dcirc" # @param ["YZ", "XZ", "3Dcirc", "3Dsq"]
ymin = -2.0
ymax = 2.0

p_lens = optSta(test_bundle; rend=rend, ydom = -2:0.1:2)
Out[0]:

结论

我们已经学会了如何使用GeometricalOptics 库来描述演示几何光学效应的简单模型(模型不反映波效应)。

除了安装该库,我们还需要 7 行代码来创建射线光束通过透镜传播的模型。