吾爱光设

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

[求助] ZEMAX宏有没有办法用数组储存数值?

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-22 09:34
  • 签到天数: 462 天

    [LV.9]以坛为家II

    88

    主题

    740

    回帖

    45

    积分

    新手

    积分
    45
    发表于 2024-11-21 18:37 | 显示全部楼层 |阅读模式
    本帖最后由 hhhddd 于 2024-11-21 18:46 编辑

         前辈们好,最近在写宏:我希望得到peak值和defocus值。

         我的思路是这样的:从离焦曲线的左右范围-0.05~0.05mm,从左往右推,比MTF的大小,如果后者比前者大,那么定义这个点为峰值,就得到了peak值;然后在把这个点的坐标和像面的坐标相对比,就可以得到defocus的值。现在有一个问题,就是我范围取大了之后,可能会把峰值计算错误,如图所示,从X到Y,第一次比大小的时候,就会得到B点的值,然后B点就变成我的最大值了,但实际上A点才是整个范围内的最大值。有没有什么办法,能让我储存最大值,(比如定义一个数组),然后再在数组内比大小,谁最大谁就是最大值。(C语言没及格,不会写宏,大佬轻喷)




    本帖子中包含更多资源

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-22 09:02
  • 签到天数: 692 天

    [LV.9]以坛为家II

    5

    主题

    226

    回帖

    103

    积分

    入门

    积分
    103
    发表于 2024-11-21 19:31 | 显示全部楼层

    回帖奖励 +1 枚金币

    可以的,用默认数组VEC2()就能实现,参考我这段写的程序

    本帖子中包含更多资源

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

    ×

    评分

    参与人数 1金币 +3 收起 理由
    光电鸭 + 3 很给力!

    查看全部评分

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-22 09:34
  • 签到天数: 462 天

    [LV.9]以坛为家II

    88

    主题

    740

    回帖

    45

    积分

    新手

    积分
    45
     楼主| 发表于 2024-11-22 09:25 | 显示全部楼层
    世界应该有光 发表于 2024-11-21 19:31
    可以的,用默认数组VEC2()就能实现,参考我这段写的程序

    哥,我这个应该是个连续量,不是离散的,当达到峰值(一个极大值)后,它右边的值都比他小,那前面这个值就都会判断为最大值,应该是连续多个的
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-22 09:02
  • 签到天数: 692 天

    [LV.9]以坛为家II

    5

    主题

    226

    回帖

    103

    积分

    入门

    积分
    103
    发表于 2024-11-22 09:34 | 显示全部楼层

    回帖奖励 +1 枚金币

    hhhddd 发表于 2024-11-22 09:25
    哥,我这个应该是个连续量,不是离散的,当达到峰值(一个极大值)后,它右边的值都比他小,那前面这个值就 ...

    可以在循环里面再加一层循环,增加采样点
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-22 09:34
  • 签到天数: 462 天

    [LV.9]以坛为家II

    88

    主题

    740

    回帖

    45

    积分

    新手

    积分
    45
     楼主| 发表于 2024-11-22 09:40 | 显示全部楼层
    世界应该有光 发表于 2024-11-22 09:34
    可以在循环里面再加一层循环,增加采样点

    哥,你说的这个太高级了我不会,我目前是label里面嵌套的for循环,不知道这样行不行。然后最后再找最大值



    本帖子中包含更多资源

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-22 08:28
  • 签到天数: 281 天

    [LV.8]以坛为家I

    6

    主题

    201

    回帖

    42

    积分

    新手

    积分
    42
    发表于 2024-11-22 09:44 | 显示全部楼层

    回帖奖励 +1 枚金币

    可以参考这篇帖子的第12楼,h ttp://www.optzmx.com/thread-7312-2-1.html。思路如下:先声明数组,比如你需要场曲和峰值,那就声明一个declare Xbar,double,1,2*N+1  #N实际上就是采样的点数。以及declare Max_T,double,1,field  #这个是峰值的声明,后面通过for循环找出最大值以及对应的采样点数,就可以找到场曲和峰值了。具体可以参考这个帖子。
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情

    2024-11-22 09:53
  • 签到天数: 946 天

    [LV.10]以坛为家III

    16

    主题

    383

    回帖

    119

    积分

    入门

    积分
    119
    发表于 2024-11-22 10:13 | 显示全部楼层

    回帖奖励 +1 枚金币

    hhhddd 发表于 2024-11-22 09:40
    哥,你说的这个太高级了我不会,我目前是label里面嵌套的for循环,不知道这样行不行。然后最后再找最大值
    ...

    for里面就不用k+1了啊,先定义一个初始变量A1=0,for里面加 if z(x)>A1; A1=z(x)就好了(语法自己补充完整)
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-7-10 12:13
  • 签到天数: 36 天

    [LV.5]常住居民I

    5

    主题

    153

    回帖

    21

    积分

    新手

    积分
    21
    发表于 2024-11-22 10:41 | 显示全部楼层

    回帖奖励 +1 枚金币

    先使用一个边缘光线高度求解,这样初始像面就会在你标注的A点附近,然后再做Thic-0.02mm去扫TF的最高点就好了,
    这样效率更高,也更容易精准抓取到A点最高值
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-10-11 13:49
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    6

    主题

    39

    回帖

    4

    积分

    小白

    积分
    4
    发表于 2024-11-22 10:59 | 显示全部楼层

    回帖奖励 +1 枚金币

    这不就是一个求数组中最大值的函数吗,你管他有没有局部最大值,直接用排序法对数组中每一个元素挨个比较就完事。
    你先把每一个focus的距离和数组的序号建立一个对应关系,然后将focus的值存到数组,最后再用一个求最大值的函数找出最大值,再输出对应的focus就行了
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-22 09:34
  • 签到天数: 462 天

    [LV.9]以坛为家II

    88

    主题

    740

    回帖

    45

    积分

    新手

    积分
    45
     楼主| 发表于 2024-11-22 11:21 | 显示全部楼层
    有生之年 发表于 2024-11-22 10:13
    for里面就不用k+1了啊,先定义一个初始变量A1=0,for里面加 if z(x)>A1; A1=z(x)就好了(语法自己补充完 ...

    哥你说得对,是我傻逼了,您看这样是吗



    本帖子中包含更多资源

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

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-22 16:58 , Processed in 0.140625 second(s), 25 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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