切换到宽版
  • 广告投放
  • 稿件投递
  • 繁體中文
    • 998阅读
    • 0回复

    [分享]如何使用可编程界面及示例(球面) [复制链接]

    上一主题 下一主题
    离线infotek
     
    发帖
    5734
    光币
    22822
    光券
    0
    只看楼主 倒序阅读 楼主  发表于: 2021-05-24
    摘要 rc_m{.b  
    L(y70T  
    为您的光学仿真提供最大的多功能性是我们的宗旨之一。在本文档中,我们将向您展示如何编写自定义表面:即如何定义高度函数h(x,y)。该函数是在参数化平面上用x,y坐标来表示3D表面。我们可以使用这些表面来配置系统中的光学组件。在VirtualLab的默认模板中,我们提供最基本的锥形表面; 但在本教程中,我们使用球面作为简单的编程示例。 r:*G{m-  
    u\\t~<8  
    kwjO5 OC8  
    可编程界面所在位置:目录 :=Olp;+_  
    2<D| {  
    ]$smFF  
    提示:您可以在界面目录中保存自定义界面“customized interface”(作为用户自定义“User Defined”)供以后使用。 " U\RN  
    5(>=};r+  
    可编程界面所在位置:组件 -.Wcz|  
    us.#|~i<h  
    VF`!ks  
    7^dr[.Q[*  
    Xf u0d1b  
    编写代码 &8$v~  
    Iz0$T.T  
    .psb# 4  
    •右侧面板显示了可用的独立参数列表。 * %D_\0;  
    •x和y表示独立变量,即平面上的2D坐标。 ]az(w&vqg2  
    •由孔直径X“ApertureDiameterX”和孔直径Y“ApertureDiameterY”(两者都在界面的常规配置对话框中确定)来定义x和y的间隔。 H4g8 1V=  
    •主函数中的代码必须每x,y点返回一个双精度“double”类型的值。该值表示该点的高度。所有这些高度值的集合定义了3D表面。 h;V 4|jM  
    •使用Snippet Body将支持函数中的部分代码分组。 PaCC UF  
    hRf l\Q[  
    u)oAQ<w  
    DU^.5f  
    提示:全局参数(Global Parameters),代码段帮助(Snippet Help),高级设置选项卡(Advanced Settings tabs)和界面的其他方面与VirtualLab中的其他可编程元素具有等效功能。
    Kg%9&l  
    WvfP9(-  
    表面梯度的定义 Am, {Fj  
    m23"xnRB  
    }e\"VhAl/  
    •精确计算界面的梯度是光学仿真的基础。 g+#<;Gbpe  
    •VirtualLab中的可编程界面允许两种不同的梯度定义模式:数值模式,具有可调精度(由软件自动执行)或解析模式(由用户另外编程)。 3](hMk,}  
    Rqe. =+Qs  
    Q y qOtRk  
    用户自定义的表面梯度 {4g';  
    8~Kq "wrbu  
    ;,77|]<XE  
    •右侧面板显示了相同的可用独立参数列表。 p:08q B|uQ  
    •该情况下,主函数中的代码必须返回一个向量D“VectorD”——一个带有两个双精度“double”(实值)坐标的向量。使用Snippet Body将支持功能中的部分代码分组。 ,L& yKS@  
    •尽可能使用梯度的解析定义,以获得更准确的替代方案。软件会检查代码的一致性,但用户必须确保为梯度输入的函数与相应的界面一致! N@d~gE&^  
    5wue2/gl  
    aC1z.?!U  
    +>PsQ^^x  
    可编程界面的输出 Yq ]sPE92  
    ;\K]~  
    $8\u  
    •输出是3D表面,其可用于定义系统中实际光学组件的界面。 N<Sl88+U  
    •在有需要时,可在实际组件内直接编程自定义界面。 6 byeO&d  
    •或者,将其保存在目录中供后续使用。 m)A:w.o  
    x?L0R{?WW  
    :E9pdx+  
    Lm[,^k  
    URb8[~dR:  
    Im6gWDdq@6  
    A4zI1QF  
    k8?._1t  
    对球形表面进行编程 2M x\D  
    球形表面 cN@_5  
    .i*oZ'[X  
    (WHg B0{  
    可编程界面所在位置:目录 ]Thke 4  
    iq' PeVo  
    lC($@sC%  
    F!z ^0+H(  
    可编程界面所在位置:组件 t?"(Zb  
    @&?(XY 'M%  
    bTJ<8q  
    设置表面的定义区域 (_ G>dP_  
    .57p4{  
    f#z:ILG=  
    •在进入编程界面之前的配置对话框中,用户可以定义表面定义区域(参数化)的形状和大小。 yksnsHs}d  
    •在本例中,我们使用圆孔。 # scZP  
    •请记住,球形表面的定义区域有一个自然限制,由其直径给定,在其外部没有定义表面!
    Y"lEMY  
    {py%-W  
    B@*b 9  
    进入可编程界面 N**)8(  
    LDQ,SS,  
    !q+ #JW  
    dFBFXy  
    可编程界面:全局参数 0`"oR3JY  
    p3vf7eqn  
    9)wYSz'  
    •打开编辑对话框(源代码编辑器)后,转到全局参数选项卡。 0si1:+t-[+  
    •在那里,添加和编辑一个参数: DKf(igw  
    - 双精度“double”半径= 10毫米(-1米,1米):球面曲率半径。 >@7$=Y>D  
    •使用带有小“注释”图标的按钮可以为您的自定义全局参数添加一些说明。 [W3X$r~-  
    提示:此处可能有必要添加一些陈述文本以促进其他使用者理解和使用代码段。 Q yw@ r  
    lpXGsK H2  
    $wAR cS  
    pVc+}Wzh  
    可编程界面:代码段帮助(Snippet Help) j&X&&=   
    u)<]Pb})r  
    opH!sa@U  
    •可选功能“Optional”:您可以使用“代码段帮助”选项卡编写指令,说明以及与代码段相关的一些其他数据。 ah*{NR)  
    •此选项对于使用可编程元素跟踪进度非常有用。 ulxlh8=  
    •当可编程元素被发送给其他用户处理时,它的作用发挥得尤为明显! JlYZ\  
    OjhX:{"59  
    _tHhS@   
    > -OOU  
    nYSe0w  
    / <)Vd  
    可编程界面:编写代码 S OI=~BGd)  
    Bf*>q*%B{  
    f- (i%  
    d3:GmB .  
    可编程界面:用户自定义梯度 K T0t4XPM  
    l_}d Q&R  
    i2Wvu3,D3-  
    可编程界面:使用您的代码段(Snippet) A1/@KC"&{G  
    QdgJNT<=H,  
    %>$<s<y  
    F ,472H  
    可编程界面的输出 OK]QDb  
    `rVru= zoy  
    5TJd9:\Af  
    ~5+RK16  
    此表面由代码完全解析定义——完全准确“full accuracy”(达到双精度水平) ir<e^a  
    4`i8m  
    将自定义界面保存到目录中 (=^KP7  
    =sk[I0W  
    FGi7KV=N  
    ,jRAVt +{N  
    提示:如果您使用目录来定义您的自定义界面,系统将会自动提示您将工作保存到目录中。 {R ),7U8  
    $6Q^u r:  
    故障排除提示  p?f\/  
    ASHU0v  
    Z$/76  
    T)gulP  
    您注意到自定义表面3D可视化中奇特的边界效果“border effects”了吗? ?5EH/yV;  
    e%[*NX/  
    *:yG)J 3F  
    T^7Cv{[  
    M/6Z,oOU  
    测试代码! *#YZm>h   
    G{!er:Vwdh  
    ]P3m=/w  
    Mm$\j*f/  
    mi] WZlg$  
    v\,N"X(,  
    文件信息 1_TuA(  
    >>J3"XHX  
    KZjh<sjX|  
    *U^Y@""a  
    d AcSG  
    QQ:2987619807 r+bGZ  
     
    分享到