Ray Optics 光学仿真:浏览器中快速搭建 2D 几何光学场景的免费工具
【免费下载链接】ray-opticsA web app for creating and simulating 2D geometric optical scenes, with a gallery of (interactive) demos.项目地址: https://gitcode.com/gh_mirrors/ra/ray-optics
讲透镜成像时最直观的办法,是当场拖几块玻璃、画一条光线,让学生亲眼看到像落在哪。Ray Optics 光学仿真就是为此而做的 2D 几何光学仿真工具:它跑在浏览器里,你摆上光源、透镜和反射镜,光路、聚焦位置与虚像位置会立刻画出来,改一个参数就重新演一遍。
球面透镜与曲面镜组合下的光线折射与反射,即项目封面示例
项目定位:浏览器里的一间 2D 光学实验室 🔬
Ray Optics 是一个 Apache-2.0 许可的开源 Web 应用(当前版本 5.5.0):前端用 Vue 3 加 Webpack 打包,场景数据全部写成 JSON,几何与物理量支持公式求值。它只解决一件事——不装任何光学软件,在页面上画出光路并验证它对不对。画廊预置了 77 个可交互演示,从单条光线到开普勒望远镜;界面提供 25 种语言。
核心能力:Ray Optics 光学仿真覆盖的四类光路
从光源到像点:一条光线的完整旅程
输入是三类光源(单条光线、平行/发散光束、点光源)加镜面、玻璃、棱镜、分束器等元件;过程是逐段求交,光线碰镜面反射、过界面折射、被分束器一分为二;输出是一整幅光路图。它还能直接标出实像、虚像和虚物,画出"站在某个观察点能看到的像",打开光线延长线即可验证虚像的汇聚位置——这正是传统课件最难讲清的部分。
白光拆开与合成:颜色、色散与光栅
给光线带上颜色,再让它穿过玻璃、分色镜或衍射光栅,颜色会混合、被滤色片截留、或因折射率随波长变化而被拆开。你看到的输出是彩虹、RGB 分光这类通常只出现在动画里的画面。
不同波长光线在界面上的分离,用于演示色散
用公式定义任意曲面与梯度折射率
输入一段数学表达式,就能定义任意形状的镜面、玻璃界面,或折射率随位置变化的 GRIN 材料;过程是引擎对公式逐点求值后做数值积分;输出是标准元件库给不了的自定义系统光路。画廊里的光纤、GRIN 平板都走这条路。
把元件组合打包成可调参数模块
输入是把若干元件加控制点写成一个模块——BeamExpander 用两个理想透镜加 3 个控制点定义扩束镜,焦距由控制点坐标的公式算出;过程是把模块当单个对象放进场景、拖动控制点;输出是一类可复用、可传参的光学子系统。内置模块示例有 11 个,写模块时还能参考 ai-tools/ 目录里 Ray Optics Coder 聊天机器人的提示词与知识文件。
最快上手:4 条命令跑通本地 Ray Optics 光学仿真 🚀
前提只有一个:Node.js 18 以上。
git clone https://gitcode.com/gh_mirrors/ra/ray-optics cd ray-optics npm install --no-optional npm run start完成后访问 http://localhost:8080/simulator/ 即可开始拖拽。不碰代码也有零构建路径:下载预构建的发布包,用 Simple Web Server 指向它,同样在 http://localhost:8080/ 打开完整站点,步骤见 run-locally/README.md。
非开发者路线:预构建包加 Simple Web Server 即可本地运行
深入用法:密度、检测器与脚本集成
光线密度与性能怎么调
场景 JSON 里的 rayModeDensity 字段就是光线密度:密度越高,光斑越"实心",但求交次数同步上涨。多棱镜、长光程、GRIN 材料这类场景卡顿时的第一反应应是调低密度,工具栏的光线密度条可以直接拖。
提高光线密度后,聚焦光斑呈现连续分布
用检测器读出能量分布并导出 CSV
在光路末端放一个 Detector,它会按 binSize 把入射光分箱,给出总功率与辐照度分布;打开辐照度图能画出光斑形状,数据可导出为 CSV 进你自己的分析流程。场景整体也能导出为 SVG 矢量图,直接放进报告或论文。
场景 JSON 接入 Python 与 Julia 工作流
每个场景就是一份 version 5 的 JSON:元件坐标、折射率、模块公式都在里面,改场景等于改数据。integrations/ 提供 runner.js 与 Python、Julia 示例:把场景 JSON 从标准输入喂给命令行仿真器,拿回检测器读数或渲染图的 base64,批量仿真不必再打开浏览器。
适合谁用,又画不了什么
适合四类人:物理教师(画廊的 77 个场景可直接当教具)、课程演示、光学系统草图验证、以及要把仿真嵌进数据流程的科研人员。边界同样清楚:它模拟的是 2D 几何光学,没有偏振,也没有波动光学——衍射、干涉这类波效应不在几何光线的射程内;3D 光追与 WebGPU 引擎的排期见 ROADMAP.md。工程上还有两个限制:完整构建(含画廊图片生成)约需半小时;只跑 npm run start 时,导入模块窗口和部分站内链接不可用,因为那些页面还没构建。
画廊场景示例:反射与折射共同制造的"黑猫变白"
一句话定位:它把画光路图这件事从静态课件搬进了可交互、可导出、可被脚本调用的状态,而成本只是打开一个浏览器。下一步两个动作:把仓库克隆到本地(clone 地址见上节命令),跑完 4 条命令拖一个透镜试试;或者从 77 个画廊场景里挑一个,改一个参数看光线怎么动。
【免费下载链接】ray-opticsA web app for creating and simulating 2D geometric optical scenes, with a gallery of (interactive) demos.项目地址: https://gitcode.com/gh_mirrors/ra/ray-optics
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考