吾爱光设

 找回密码
 注册
会员须知
会员须知
实用帮助
实用帮助
查看: 1991|回复: 7

[我分享] 表面周期微结构zemax自定义面型编写经验分享

[复制链接]
  • TA的每日心情
    开心
    2024-8-18 16:13
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    1

    主题

    13

    回帖

    0

    积分

    小白

    积分
    0
    发表于 2024-3-26 19:40 | 显示全部楼层 |阅读模式
    本帖最后由 HzHJ 于 2024-3-26 19:40 编辑

    1.分享目的:第一次上手用户自定义面型,遇到了很多坑,给大家分享一下我的经验,后来者就不用再走这些坑了。
    坑有zemax原本很多函数是c语言编写,目前用户自定义面型一般使用C++编写,因此需要在编写前添加:

    这里需要注意 DLL2_API 为项目和文件的名称,根据你的项目进行修改。
    第二个坑,光学出身的人一般不会DLL的编译方法,DLL文件需要增加头文件

    需要修改的点和上面一样。
    第三个坑,编译不是按运行按钮而是ctrl+shift+b。即生成解决方案。然后在release文件夹中找到.dll文件,就是编译好的文件。

    2.代码编写整体架构
    一般打开zemax用户自定义文件夹中的us_stand.c文件,使用该架构进行改编。
    需要注意的点有:

    case1中可对需要的参数进行声明;
    case3是对zemax的表面矢高进行绘制,对实际的光线没有影响;
    case4是对近轴光线的方向矢量进行定义
    case5是整个代码最核心的部分,他描述了光线经过该表面的方向矢量以及光线如何从前一个表面到达用户自定义表面的相应位置。

    3.周期性微结构的核心函数
    GetCellCenter函数是编写周期性阵列结构的核心函数,该函数可以理解为将每一个微结构拉到中心的位置对其进行光线追迹求解。在us_cylar中可以找到。
    需要输入的参数一般有,N_num,代表微结构的个数,wy,代表微结构的周期长度,y,代表到达微结构表面的光线的y坐标,*cy,微结构所处的边框。
    函数编写与修改参考:首先一定要对*cy进行初始化,因为*cy可以理解为指针变量,其数据不会被清除;
    然后对y的位置进行判断,如果大于wy,就对微结构进行向下平移,一直平移到y在0到wy的范围内;
    并且记住平移的数量,即*cy;




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    ×

    评分

    参与人数 2金币 +4 收起 理由
    光吗? + 3 原创
    光电鸭 + 1

    查看全部评分

    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-8-18 16:13
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    1

    主题

    13

    回帖

    0

    积分

    小白

    积分
    0
     楼主| 发表于 2024-3-27 09:25 | 显示全部楼层
    大家有什么用户自定义面型遇到的坑也欢迎回复
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情

    2024-5-7 14:49
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    2

    主题

    3

    回帖

    0

    积分

    小白

    积分
    0
    发表于 2024-5-7 16:47 | 显示全部楼层
    您好,自定义面型用写完后转化成dll的过程中提示错误怎么办
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-8-18 16:13
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    1

    主题

    13

    回帖

    0

    积分

    小白

    积分
    0
     楼主| 发表于 2024-5-9 09:41 | 显示全部楼层
    shizhu 发表于 2024-5-7 16:47
    您好,自定义面型用写完后转化成dll的过程中提示错误怎么办

    错误的原因有很多,具体一点
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-10-16 08:47
  • 签到天数: 40 天

    [LV.5]常住居民I

    12

    主题

    85

    回帖

    0

    积分

    小白

    积分
    0
    发表于 2024-9-20 23:43 | 显示全部楼层
    请教楼主,如果要在序列模式下导入外部设计的菲涅尔透镜,可以用您这种方式吗?还是有其他更简便的方式?
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-8-18 16:13
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    1

    主题

    13

    回帖

    0

    积分

    小白

    积分
    0
     楼主| 发表于 2024-11-4 12:04 | 显示全部楼层
    我这种也可以,不过你需要有c语言的基础,而且面形需要自己推导数学表达式;zemax对于菲涅尔透镜已经有写好的面形可供使用了
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2024-11-10 20:44
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    0

    主题

    2

    回帖

    0

    积分

    小白

    积分
    0
    发表于 2024-11-10 20:33 | 显示全部楼层
    想请问lz,自定义的曲面函数有没有限制,比如能不能使用arctan这种函数定义曲面,会不会影响zemax优化什么的
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-8-18 16:13
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    1

    主题

    13

    回帖

    0

    积分

    小白

    积分
    0
     楼主| 发表于 2024-11-11 21:07 | 显示全部楼层
    bronco 发表于 2024-11-10 20:33
    想请问lz,自定义的曲面函数有没有限制,比如能不能使用arctan这种函数定义曲面,会不会影响zemax优化什么 ...

    用c语言写的,可以用,你得注意不能报错,比如不能超过atan的函数定义范围,就不会影响优化
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    联系我们|本论坛只支持PC端注册|手机版|小黑屋|吾爱光设 ( 粤ICP备15067533号 )

    GMT+8, 2024-11-23 04:31 , Processed in 0.140625 second(s), 24 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表