m+OR W"o 为您的
光学仿真提供最大的多功能性是我们的宗旨之一。在本文档中,我们将向您展示如何编写自定义表面:即如何定义高度函数h(x,y)。该
函数是在
参数化平面上用x,y坐标来表示3D表面。我们可以使用这些表面来配置
系统中的光学组件。在
VirtualLab的默认模板中,我们提供最基本的锥形表面; 但在本
教程中,我们使用球面作为简单的
编程示例。
C>T6{$xkC L'aMXNO
a.%]5%O;t 可编程界面所在位置:目录
ik8e \?3];+c9
OR?8F5o?p 提示:您可以在界面目录中保存自定义界面“customized interface”(作为用户自定义“User Defined”)供以后使用。
6Otv[8^} JSGUl4N 可编程界面所在位置:组件
t&eD;lg : GExG1n-
e% 5! B@iIj<p~ XJ?@l3D: 编写代码
,x{5,K.yWq ^<y$+HcH QRdb~f;<hj •右侧面板显示了可用的独立参数列表。
5+ fS$Q
•x和y表示独立变量,即平面上的2D坐标。
/)oxuk&}c •由孔直径X“ApertureDiameterX”和孔直径Y“ApertureDiameterY”(两者都在界面的常规配置对话框中确定)来定义x和y的间隔。
!Id F6 % •主函数中的代码必须每x,y点返回一个双
精度“double”类型的值。该值表示该点的高度。所有这些高度值的集合定义了3D表面。
zEO
9TuBO •使用Snippet Body将支持函数中的部分代码分组。
'kx{0J? fcw\`.
,(c="L4[ kY_UY~E 提示:全局参数(Global Parameters),代码段帮助(Snippet Help),高级设置选项卡(Advanced Settings tabs)和界面的其他方面与VirtualLab中的其他可编程元素具有等效功能。
][?GJ"O+U 3_33@MM 表面梯度的定义
e;!<3b |?g2k:fzB7 |ZZ3Qr+%S •精确计算界面的梯度是光学仿真的基础。
2ZE4^j| •VirtualLab中的可编程界面允许两种不同的梯度定义模式:数值模式,具有可调精度(由
软件自动执行)或解析模式(由用户另外编程)。
$7BD~U
X(WG:FP27 \H" (*["& 用户自定义的表面梯度
VKR6 i [Xz7.<0#U 6b]vHT|p •右侧面板显示了相同的可用独立参数列表。
||!k 3t#< •该情况下,主函数中的代码必须返回一个向量D“VectorD”——一个带有两个双精度“double”(实值)坐标的向量。使用Snippet Body将支持功能中的部分代码分组。
{ld([ •尽可能使用梯度的解析定义,以获得更准确的替代方案。软件会检查代码的一致性,但用户必须确保为梯度输入的函数与相应的界面一致!
/,:32H 97Q!Rot
jXW71$B C}00S{nAZ 可编程界面的输出
\lY26' _FVIN;! i,)kI •输出是3D表面,其可用于定义系统中实际光学组件的界面。
7
'f> •在有需要时,可在实际组件内直接编程自定义界面。
E3gQ`+wNg? •或者,将其保存在目录中供后续使用。
l|uN-{w 'E7|L@X"r
CV&
SNA tGf }RyYzm2 >5 i8%r M~"K@g=Wr xknP
`T 对球形表面进行编程
wiFckF/
球形表面
L^0jyp T
%cN(0@
U#Z}a
d?VX 可编程界面所在位置:目录
!D6@ \ |H
|ewVUY
EL+}ab2S :_?>3c}L 可编程界面所在位置:组件
`Y(/G"] 8<g5.$xyz
VTV-$Du[} 设置表面的定义区域
qQ|v~^ CF$^we )D#*Q~ •在进入编程界面之前的配置对话框中,用户可以定义表面定义区域(参数化)的形状和大小。
i4uUvZf •在本例中,我们使用圆孔。
Q}m)Q('Rk •请记住,球形表面的定义区域有一个自然限制,由其直径给定,在其外部没有定义表面!
| 9(uiWf +1cK (Si
Z-/ E$j 进入可编程界面
Uq[NOJC $Itehy
:Tjo+vw7$H ikofJl]9 可编程界面:全局参数
Q*lZ;~R _$F I> /O&j1g@ •打开编辑对话框(源代码编辑器)后,转到全局参数选项卡。
\Hy~~Zh2 •在那里,添加和编辑一个参数:
W/&cnp\ - 双精度“double”半径= 10毫米(-1米,1米):球面曲率半径。
RE*SdazY? •使用带有小“注释”图标的按钮可以为您的自定义全局参数添加一些说明。
scA&:y 提示:此处可能有必要添加一些陈述文本以促进其他使用者理解和使用代码段。
T$RZRZo \a}%/_M\
jT'1k[vJj O@EpRg1 可编程界面:代码段帮助(Snippet Help)
,H.q%!{h_ h"q`gj >-]Y%O;} •可选功能“Optional”:您可以使用“代码段帮助”选项卡编写指令,说明以及与代码段相关的一些其他数据。
#Ok*Or •此选项对于使用可编程元素跟踪进度非常有用。
^Dd$8$?[ •当可编程元素被发送给其他用户处理时,它的作用发挥得尤为明显!
oU{m\r /tV)8pEj
\f%jN1z :}j{ NM#
b~cN#w
# Ga~IOlS 可编程界面:编写代码
{HQ? CxwZ$0
5]gd,&^?> s_VP(Fe@K 可编程界面:用户自定义梯度
k+%6:r,r& &grT}
Q7f\ 5QjT 可编程界面:使用您的代码段(Snippet)
,AWN *OS {6A3?q
347p2sK> R`A@F2 可编程界面的输出
@Vc*JEW *qGxQ?/
4Yx?75/ 41,Mt 此表面由代码完全解析定义——完全准确“full accuracy”(达到双精度水平)
r1xNU0A Ean@GDLz8 将自定义界面保存到目录中
t|d9EC]c( sy#CR4X
!SEg4z ?r#e 提示:如果您使用目录来定义您的自定义界面,系统将会自动提示您将工作保存到目录中。
MyAi)Mz~o
"ifYy>d 故障排除提示
Wu9@Ecb hbzU?_}
GuNzrKDr \h?C
G_|] 您注意到自定义表面3D可视化中奇特的边界效果“border effects”了吗?
g!cTG-bh>J @'s^
t%V!SvT8+ $_% a=0 -T`rk~A9A 测试代码!
0vt?yD &8z`]mB{t
t|%wVj?_ gI<TfcC