看了上面的回答,基本都是商业软件。
我在 Optical Design Software 这个网页上看到有很多的这类软件列表。
不过也不知道其中开源软件有多少。
迫于穷困,我一直是买不起什么商业软件的,这类情景我就往往只能尽量找一些具备基本功能的开源软件。
去 StackExchange 搜索,发现了 https://physics.stackexchange.com/questions/38865/free-optics-simulation-programs 这个帖子,里面有很多新线索。
我自己又在 GitHub 上面搜索了一番,这次就将我找到的几个分享一下。
三年过去了,发现了一个OpticsPy:https://github.com/Sterncat/opticspy
可惜好几年过去了,需要做一点修改才能在现在的Python3.9和3.11上运行。
当然了,也都是很简单的一点小修改。
于是有了下面的这个分支:
https://github.com/cycleuser/opticspy具体使用方法是:
git clone https://github.com/cycleuser/opticspy
cd opticspy
python setup.py install然后运行下面的代码测试:
from opticspy.ray_tracing import *
New_Lens = lens.Lens(lens_name='Doublegauss',creator='XF')
New_Lens.FNO = 5
New_Lens.lens_info()
New_Lens.add_wavelength(wl = 656.30)
New_Lens.add_wavelength(wl = 587.60)
New_Lens.add_wavelength(wl = 486.10)
New_Lens.add_field_YAN(angle=0)
New_Lens.add_field_YAN(angle=10)
New_Lens.add_field_YAN(angle=14)
New_Lens.add_surface(number=1,radius=10000000,thickness=10000000,glass='air')
New_Lens.add_surface(number=2,radius=56.20238,thickness=8.75 ,glass='N-SSK2_schott')
New_Lens.add_surface(number=3,radius=152.28580,thickness=0.5,glass='air')
New_Lens.add_surface(number=4,radius=37.68262,thickness=12.5,glass='N-SK2_schott')
New_Lens.add_surface(number=5,radius=10000000 ,thickness=3.8 ,glass='F5_schott')
New_Lens.add_surface(number=6,radius=24.23130,thickness=16.369445,glass='air')
New_Lens.add_surface(number=7,radius=10000000,thickness=13.747957,glass='air',STO=True)
New_Lens.add_surface(number=8,radius=-28.37731,thickness=3.8,glass='F5_schott')
New_Lens.add_surface(number=9,radius=100000000,thickness=11,glass='N-SK16_schott')
New_Lens.add_surface(number=10,radius=-37.92546,thickness=0.5,glass='air')
New_Lens.add_surface(number=11,radius=177.41176,thickness=7,glass='N-SK16_schott')
New_Lens.add_surface(number=12,radius=-79.41143,thickness=61.487536,glass='air')
New_Lens.add_surface(number=13,radius=100000000,thickness=0,glass='air')
New_Lens.refresh_paraxial()
New_Lens.solve_imageposition()
trace.trace_draw_ray(New_Lens)
draw.draw_system(New_Lens)
analysis.spotdiagram(New_Lens,[1,2,3],[1,2,3])
analysis.Ray_fan(New_Lens,[1,2,3],[1,2,3])然后得到下面的结果:
更多相关文档还是去看原作者的网站了:
http://opticspy.org/<hr/>1. PyOpTools (答主在python3.7下直接通过pip安装失败)
是用 Python 写的,可以通过 pip install pyoptools 直接安装,自然是跨平台的,最近一直有更新,看着很赞。
https://github.com/cihologramas/pyoptools但直接使用 pip 安装失败,一直是“ __inline__”报错。
我将文件夹内所有 c 文件中的“ __inline__ __attribute__”替换成了“ __attribute__”,结果成功安装了。
但还是一直不能用,我试过各种胡乱修改,都还是不行。
<hr/>2. OptGeo(答主实测无法在macOSX 10.15下运行)
网站都是法语的好像?提供了Windows/Linux/macOS的打包文件,但我试了其2018年的版本在macOS下最新版本中无法运行,可能是开发搁置了?
optgeo<hr/>3. Optilux(答主实测了但不会用)
使用 Matlab/Octave 二选一来运行,目前还是0.1的状态。最近更新好像已经是2009年了,怕是弃坑了?
an open source optical system simulator<hr/>4. Goptical (答主未测试)
GNU 光学计划,然而似乎也很久没更新?只提供源代码下载。
Goptical project home<hr/>5. TracePy (答主在python3.7下通过pip 安装成功,但目前不会用)
https://github.com/GNiendorf/tracepy |