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). 在我们的例子中,first系数表征镜头前面的空间。

一个对象 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条射线,其坐标来自 -1 以前 1 有间隔 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行代码来创建一个射线通过透镜传播的模型。