Optiland端到端案例实战:从需求到处方报告,完整设计一枚双胶合透镜
【免费下载链接】optilandComprehensive optical design, optimization, and analysis in Python, including GPU-accelerated and differentiable ray tracing via PyTorch.项目地址https://gitcode.com/gh_mirrors/op/optiland点击查看免费下载Optiland 是一款用 Python 编写的开源光学设计、优化与分析工具。本文以官方端到端案例 “Design a Doublet, End to End” 为主线带你走通无色散双胶合透镜achromatic doublet从需求定义到处方报告生成的完整设计流程——不需要切换任何商业软件一个 Python 环境即可闭环。为什么选双胶合透镜它是最简单的“值得认真设计”的镜头单片透镜无法消除轴向色差而双胶合结构恰好是能校正色差的最小系统。本文的需求 → 一阶布局 → 分析 → 优化 → 公差分析 → 处方报告闭环正是光学工程师的完整工作流程官方案例见 Tutorial_1e_Design_a_Doublet_End_to_End.ipynb。先安装环境pip install optiland 第一步写下设计需求确定“好”的量化标准光学设计永远从一张需求表开始。本案例的双胶合透镜规格如下需求项数值有效焦距 EFL100 mm入瞳直径 EPD20 mm即 f/5半视场角±2°波带可见光 F (0.4861 µm)、d (0.5876 µm)、C (0.6563 µm)目标近轴接近衍射极限全波段色差小在设计任何面型之前先算两个基准数字f/5 下可见光的Airy 半径约 1.22·λ·(f/#) ≈ 3.6 µm目标像元尺寸约 5 µm。因此RMS 光斑半径在个位数微米就算合格几十微米就是失败——这就是后文评判每步结果的标尺。GUI 的 System Properties 面板中的波长表与本案例需求完全一致F、d、C 三条可见光波长d 线为主波长Primary Yes。 第二步一阶布局用单片透镜做基线在选玻璃、斗像差之前先做“一阶”系统用一片正透镜满足焦距和口径要求。一块 R₁ ≈ 51.7 mm 的平凸 N-BK7 透镜即可给出约 100 mm 焦距。import numpy as np from optiland.optic import Optic from optiland.diagnostics import check_system singlet Optic(namef/5 Singlet (baseline)) singlet.surfaces.add(index0, thicknessnp.inf) # 物面无穷远 singlet.surfaces.add(index1, radius51.68, thickness8.0, materialN-BK7, is_stopTrue) # 前表面 singlet.surfaces.add(index2, radiusnp.inf, thickness95.0) # 后表面 singlet.surfaces.add(index3) # 像面 singlet.set_aperture(aperture_typeEPD, value20.0) # f/5 singlet.fields.set_type(angle) singlet.fields.add(y0.0) singlet.wavelengths.add(value0.5876, is_primaryTrue) check_system(singlet) # 光路完整性检查确保系统描述无遗漏 singlet.updater.image_solve() # 将像面移到近轴焦点 Optiland 遵循 “after” 约定thickness和material描述的是该表面之后的空间而非表面本身。规则细节见 docs/conventions.rst。结果如何近轴 RMS 光斑半径约85 µm——超过 Airy 半径二十倍。一阶需求焦距、口径达标了成像质量彻底失败。看三波长点列图就明白了三个波长落在三个不同的焦面上这就是轴向色差靠怎么“弯”单片透镜都无法消除——这正是双胶合结构存在的理由。调用lens.draw3D()可以随时获得这样的 3D 视图基于 VTK直观核对光路。 第三步换结构——胶合双片校正色差无色散双胶合透镜把一片正火石镜和一片负密晶镜胶合在一起。两种玻璃色散不同组合起来可以让 F 光和 C 光聚焦到同一点同时保持净正光焦度。本案例选用 N-BK7冕牌玻璃 N-SF5火石玻璃lens Optic(nameAchromatic Doublet, f/5, EFL 100 mm) lens.surfaces.add(index0, thicknessnp.inf) # 物面 lens.surfaces.add(index1, radius61.0, thickness8.0, materialN-BK7, is_stopTrue) # 冕牌前表面 lens.surfaces.add(index2, radius-44.0, thickness3.0, materialN-SF5) # 胶合面 lens.surfaces.add(index3, radius-129.0, thickness95.0) # 火石后表面 lens.surfaces.add(index4) # 像面 lens.updater.image_solve()三个曲率半径定义了整个结构冕牌前表面、胶合面、火石后表面。仅更换结构近轴 RMS 光斑就从 ~85 µm 降到几微米——与 Airy 半径相当。全视场仍不够好剩下的误差交给分析与优化处理。 第四步像差分析点列图与光线扇形图定位残余误差点列图SpotDiagram告诉你模糊有多大光线扇形图RayFan告诉你是什么像差曲线形状对应像差类型不同波长曲线的分离程度对应该差含量。from optiland.analysis import SpotDiagram, RayFan, RmsSpotSizeVsField SpotDiagram(lens).view() # 像点弥散程度 RayFan(lens).view() # 识别像差类型 RmsSpotSizeVsField(lens, num_fields16).view() # RMS 光斑随视场变化本案例的解读近轴曲线近乎平坦、略带 S 形——残余球差加少量二级光谱离轴曲线倾斜且相互分离——彗差与像面弯曲且随视场角增大。分析框架完整实现在 optiland/analysis/ 目录。 第五步透镜优化三个曲率半径做变量、焦距做硬约束Optiland 的优化永远是同三步声明变量 → 声明操作数“好”的定义→ 交给优化器。焦距是需求不是偏好所以给f2操作数高权重from optiland.optimization import OptimizationProblem, OptimizerGeneric problem OptimizationProblem() # 1. 变量三个自由曲率半径 for surface_number in (1, 2, 3): problem.add_variable(lens, radius, surface_numbersurface_number) # 2. 操作数锁住焦距硬约束高权重 problem.add_operand(f2, target100.0, weight10.0, input_data{optic: lens}) # 3 个视场 × 3 个波长的 RMS 光斑目标为 0 for Hy in (0.0, 0.7, 1.0): for wl in (0.4861, 0.5876, 0.6563): problem.add_operand(rms_spot_size, target0.0, weight1.0, input_data{optic: lens, Hx: 0.0, Hy: Hy, wavelength: wl, num_rings: 6, surface_number: -1}) # 3. 交给优化器 OptimizerGeneric(problem).optimize(maxiter200) lens.updater.image_solve() # 优化移动了焦点重新对焦优化后每个视场的光斑都比初始值更小。收益不算巨大——固定玻璃对的胶合双片自由度极少知道什么时候一种结构已“榨干”本身就是设计功力。想更好就要换结构拆开胶合面留空气间隔或更换玻璃对见 Glass Expert 案例 Tutorial_3e_Glass_Expert_Categorical_Optimization.ipynb。优化框架源码在 optiland/optimization/。 第六步公差分析验证设计能经得起制造只在标称参数下工作的设计不是设计。公差分析回答当曲率半径、厚度、装调落在真实制造带宽内时性能掉多少灵敏度分析Sensitivity每次只扰动一个参数找出最敏感的项——它决定你要给厂商提多严的公差蒙特卡洛Monte Carlo从真实分布中同时扰动所有参数跑几百次看结果分布。90 分位 RMS 光斑仍落在预算内设计才可制造该分布本身就是交付物。from optiland.tolerancing import Tolerancing, SensitivityAnalysis tolerancing Tolerancing(lens) # 示例半径 ±0.5 mm 扫描21 步、厚度 7.9~8.1 mm、倾斜 ±0.002 rad # ... add_perturbation(...) 若干次 ... sensitivity SensitivityAnalysis(tolerancing) sensitivity.run() sensitivity.view()蒙特卡洛部分使用高斯分布半径 1σ 0.1% 标称值倾斜 1σ ≈ 1 角分跑 100 次mc.view_histogram()直接出直方图。模块位于 optiland/tolerancing/。 第七步处方报告一行代码生成完整交付文档最后一步是生成可以交给同事或厂商的文档每个面、每种材料、一阶参数、残余像差一应俱全。from optiland.prescription import Prescription Prescription(lens).view() # 控制台打印 Prescription(lens).save(report.pdf) # 保存为 PDF其他扩展名导出纯文本Prescription默认包含 5 个 SectionSection内容SystemOverview系统总览名称、口径、波长、视场FirstOrder一阶性质EFL、F 数、后截距等SurfaceGeometryTable各面曲率半径与厚度表SurfaceMaterialTable各面材料表SeidelAberrationSectionSeidel 像差系数核心实现在 optiland/prescription/prescription.py各 Section 在 optiland/prescription/sections/console / plain text / PDF 三种渲染器在 optiland/prescription/renderers/。需要定制报告时传入自定义 Section 列表即可。️ 替代方案用 GUI 走通同样的双胶合设计流程不想写代码Optiland 自带完整 GUI同一个双胶合设计可以全程鼠标操作Lens Data Editor 编辑面数据、System Properties 配置波长与口径、Analysis 窗口跑点列图左侧栏还有 Optimization 与 Tolerancing 专用面板。GUI 快速上手指南见 docs/gui_quickstart.rst。 下一步从双胶合走向多片复杂系统完成这个案例后你已经拥有了完整的光学设计闭环。沿着官方案例继续走Tutorial_2c_Aberration_Analyses.ipynb——Seidel 系数、波像差学会“读懂”像差Tutorial_2d_OPD_PSF_and_MTF_Calculations.ipynb——衍射级的 MTF/PSF多数规格书真正使用的指标Tutorial_3d_Optimization_Case_Study_Cooke_Triplet.ipynb——把双片思路扩展到四片 Cooke 结构完整学习路线图见 docs/learning_guide.rst 与任务式索引 docs/how_do_i.rst。 附录案例相关文件速查文件 / 目录说明docs/examples/Tutorial_1e_Design_a_Doublet_End_to_End.ipynb本文对应的完整端到端案例optiland/prescription/处方报告生成模块optiland/optimization/优化问题、操作数与优化器optiland/analysis/点列图、光线扇形图等分析框架optiland/tolerancing/灵敏度分析与蒙特卡洛公差docs/quickstart.rst5 分钟快速上手docs/conventions.rst面参数“after”约定详解赞分享【免费下载链接】optilandComprehensive optical design, optimization, and analysis in Python, including GPU-accelerated and differentiable ray tracing via PyTorch.项目地址https://gitcode.com/gh_mirrors/op/optiland点击查看免费下载相关推荐Optiland透镜属性与处方报告指南如何读取一阶光学特性并生成专业设计报告Optiland透镜属性与处方报告指南如何读取一阶光学特性并生成专业设计报告 Optiland 是一个用 Python 实现的光学设计、优化与分析库支持 P如何永久保存微信聊天记录WeChatMsg本地化数据守护完整指南如何永久保存微信聊天记录WeChatMsg本地化数据守护完整指南 你是否曾经因为手机更换、系统升级或意外删除而丢失了珍贵的微信聊天记录那些与家人朋友的温馨对CCG Workflow 的 ui-ux-designer 子智能体从需求到可实施前端设计方案的完整实战指南CCG Workflow 的 ui ux designer 子智能体从需求到可实施前端设计方案的完整实战指南 导读 本文讲解 CCG Workflow 多模型人工智能AI 应用AI Agent多智能体Agent 工作流开发工具CLIdsh-plugin上一篇使用 CAMEL Loong Cookbooks 构建 LLM 强化学习环境单步环境、批量评估与多步博弈实战下一篇Zola 快速上手用单个二进制静态站点生成器从零搭建博客创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

模型离线准确率 95%,上线却没人敢停机?PHM 预测性维护项目被故障标签定义混乱拖垮的真相

模型离线准确率 95%,上线却没人敢停机?PHM 预测性维护项目被故障标签定义混乱拖垮的真相

"你们这个 PHM 模型上周又报了三次主轴即将失效,产线主管说查了一圈啥事没有,直接把告警关了。我花三百万上的预测性维护系统,到底是在帮我还是添乱?"这是某电子厂设备总监在模型验收会上甩出的一句话,也是过…

2026/10/16 6:19:51 阅读更多 →
激光雷达点云障碍物检测之欧式聚类:原理、参数与调优实战

激光雷达点云障碍物检测之欧式聚类:原理、参数与调优实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 6:18:51 阅读更多 →
RDKit 增强立体化学(Enhanced Stereochemistry)完全指南:StereoGroup 表示、枚举、反应与文件往返

RDKit 增强立体化学(Enhanced Stereochemistry)完全指南:StereoGroup 表示、枚举、反应与文件往返

科学计算科研机器学习 【免费下载链接】rdkit The official sources for the RDKit library 项目地址: https://gitcode.com/gh_mirrors/rd/rdkit 点击查看 免费下载 RDKit 的增强立体化学(Enhanced Stereochemistry)机制用于表达样品中立体…

2026/10/16 6:18:51 阅读更多 →

最新新闻

SpringBoot+Vue高校健康管理平台:从业务闭环到答辩演示的全栈实战指南

SpringBoot+Vue高校健康管理平台:从业务闭环到答辩演示的全栈实战指南

做毕设选题目的时候,很多同学会陷入两个极端:要么选一个纯仿电商的商城系统,烂大街不说,答辩老师一眼就能看出是不是自己写的;要么选一个看起来很高大上的分布式微服务项目,结果做了一半发现根本撑不起来&a…

2026/10/16 7:01:59 阅读更多 →
千问    LeetCode 587. Erect the Fence Java Implement

千问 LeetCode 587. Erect the Fence Java Implement

Here is the Java implementation for LeetCode 587. Erect the Fence, using Andrew’s monotone chain convex hull. I verified the logic against the official examples plus collinear and vertical-edge cases — all pass. Java Implementation class Solution { publi…

2026/10/16 7:01:59 阅读更多 →
ethers事件监听全指南:原理、过滤器、实战与坑

ethers事件监听全指南:原理、过滤器、实战与坑

写区块链开发的人,迟早会遇到“事件监听”这个坎。刚开始写合约交互时,大多数人都只是调一下读方法、发一笔交易,觉得ethers这个库也就这么回事。但等你真正开始做链上监控、做数据同步、做自动交易提醒,或者哪怕只是写一个展示最…

2026/10/16 7:01:59 阅读更多 →
Java NIO连接池实战:解决微信API高并发下的粘包与保活问题

Java NIO连接池实战:解决微信API高并发下的粘包与保活问题

1. 为什么我要用Java NIO重写微信API的连接管理先交代一下背景。我之前维护一个微信公众号后台服务,消息推送接口的调用量不算夸张,但有个很头疼的问题:每次请求都新建TCP连接,高峰期连接数直接冲到几千,服务器文件描述…

2026/10/16 7:01:59 阅读更多 →
警卫岗的IT基本功:从监控系统到故障排查的数字化指南

警卫岗的IT基本功:从监控系统到故障排查的数字化指南

半夜的值班室里,监控墙忽然有三四路画面同时变成蓝屏。对讲机里传来前场巡逻队员的声音:“整个系统都不对劲了,大门那台摄像机也看不了。”你要是以前的警卫班长,大概率会直接打电话叫设备厂家的技术员。但这两年越来越多的单位把…

2026/10/16 7:01:59 阅读更多 →
Hadoop与Spark对比:从计算模型到选型实践

Hadoop与Spark对比:从计算模型到选型实践

1. 先理清一个误区:Hadoop和Spark根本不是同一层的东西在大数据处理框架的选型问题上,几乎每隔一段时间就会有人把Hadoop和Spark拿出来做一次对比。作为长期和数据平台打交道的从业者,我被问过最多的问题就是:我现在用的是Hadoop&…

2026/10/16 7:00:59 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →