Optiland近轴光学

文章目录

光轴对象

【Paraxial】是optiland中的光轴类,不能单独存在,必须绑定到一个具体的Optic(光学系统)上。以optiland示例的Petzval镜头为例,可直接调取其光轴成员

python 复制代码
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'Times New Roman' 
from optiland.samples.objectives import PetzvalLens
lens = PetzvalLens()
lens.draw()
plt.show()

type(lens.paraxial)
# <class 'optiland.paraxial.Paraxial'>

光轴方法

【Paraxial】类的本质作用就是在代码层面实现高斯光学的数学模型,因此其内置了许多方法,包括

方法 计算内容
f1() 前焦距(Front Focal Length),即物方主点到物方焦点的距离。
f2() 后焦距(Back Focal Length),也叫有效焦距(EFL),即像方主点到像方焦点的距离。
F1()/F2() 物方/像方焦点在系统中的位置。
P1() 物方主平面的位置,这个位置通常是相对于系统的第一面(Surface 1)定义的。
P2() 像方主平面(后主面) 的位置。注意:这个位置通常是相对于像面(Image Surface)定义的。
N1() / N2() 物方节点和像方节点的位置。在物像空间折射率相同(如都在空气中)的情况下,节点与主点重合。
EPD() 入瞳直径(Entrance Pupil Diameter)。
EPL() 入瞳位置(Entrance Pupil Location)。
XPL() 出瞳位置(Exit Pupil Location)(相对于像面)。
XPD() 出瞳直径(Exit Pupil Diameter)。
FNO() 像方 F 数(Image-space F-number),如果系统定义了直接 F 数,则直接返回。
magnification() 系统的横向放大率(Transverse Magnification)。
invariant() 拉格朗日不变量(Lagrange Invariant)

可视化

下面将近轴光学中部分重要参数在图像中绘制出来

代码如下

python 复制代码
fig, ax = lens.draw(num_rays=3)

# 获取paraxial属性
p = lens.paraxial

# 获取表面位置
z1 = lens.surfaces.positions[1, 0]  # 第一表面位置
zImg = lens.surfaces.positions[-1, 0]   # 像面位置

F1_global = z1 + p.F1()       # 物方焦点
F2_global = zImg + p.F2()     # 像方焦点
P1_global = z1 + p.P1()       # 物方主面
P2_global = zImg + p.P2()     # 像方主面
EPL_global = z1 + p.EPL()     # 入瞳位置
XPL_global = zImg + p.XPL()   # 出瞳位置

ax.axvline(F1_global, color='red', linestyle='--', linewidth=1.5, label='F1 (Object Focus)')
ax.axvline(F2_global, color='blue', linestyle='--', linewidth=1.5, label='F2 (Image Focus)')

ax.axvline(P1_global, color='red', linestyle=':', linewidth=2, label='P1 (Object Principal)')
ax.axvline(P2_global, color='blue', linestyle=':', linewidth=2, label='P2 (Image Principal)')

ax.axvline(EPL_global, color='green', linestyle='-.', linewidth=1.5, label=f'EP (Entrance Pupil)')
ax.axvline(XPL_global, color='green', linestyle='-.', linewidth=1.5, label=f'XP (Exit Pupil)')

# 添加图例和标题
ax.legend(loc='upper left')
plt.tight_layout()
plt.show()
相关推荐
黑马水牛2 分钟前
Carla仿真系列:17_利用Carla仿真环境跑通3DGS——从采集360张图到高斯泼溅建模
python·ros·colmap·3dgs·新视角合成·carla仿真·三维建图
赵大仁2 小时前
极空间 NAS 没有命令行,我逆向了它的桌面客户端
python·ai编程·nas·mcp·极空间
空白2 小时前
Power BI +VBA 【数据分析】
python
科技苑8 小时前
Python简单网络爬虫教程
爬虫·python
Patrick在香港11 小时前
Claude Prompt 香港场景:公文里「今日」落在 6 个日历日上,「翌日」锚错了 5 天
python·自然语言处理·正则表达式·claude·数据清洗
YsyaaabB11 小时前
Python 数值分析
python
阿洛学长11 小时前
计算机二级 Python 基本操作题(15 分)真题笔记(0101 ~ 1903 全套)
python·pycharm
weixin1997010801612 小时前
[特殊字符]️《二手ERP对接电商平台的总体方案:统一数据模型 + 事件驱动 + 灰度上线6原则》(附Python源码)
大数据·python
滚雪球~12 小时前
量化交易 防止Windows电脑自动更新并重启
python·量化
L@ncor13 小时前
第二章可能出现的问题
人工智能·python