Python光学仿真wxpython透镜演示系统框架

透镜演示系统

框架

现在,我们可以做一个具备友好界面的透镜演示系统了。我们需要两个圆弧来表示透镜,一条线段表示主光轴,多条线段表示光线的传播路径。此外,还需要对光源和透镜的参数进行调节。

然而值得注意的一点是,我们在进行计算和画图过程中所用到的几何图形,在表达形式以及操作流程上可能并不相同。例如,对于光源发出的一条射线,它与透镜的作用流程为

  • 寻找与透镜前表面的交点a
  • 获取反射和透射直线
  • 寻找透射直线与透镜后表面的交点b
  • 计算透过透镜的直线

然而对于画图程序来说,光源s和a之间有一条线段,a和b之间有一条线段,若想画出透过透镜的线段,则必须先确定这条线段的另一个端点。也就是说,在求解反射、透射光线的过程中,所得到的光线表达式对于画图来说并无意义,只有端点是有意义的。

至此,即可得到这个小程序中必不可少的一些数据,包括光源参数、透镜参数、光线与表面的交点,光线端点组成的点对,所有光线的表达式,当前仍在传播的光线的表达式等。

于是可以建立如下代码:

import raypath as rp
class optitest(wx.panel):
    def __init__(self,parent=none,size=(800,600)):
        wx.panel.__init__(self,parent=parent,id=-1,size=size)
        self.bind(wx.evt_paint, self.onpaint)
        self.opti = rp.opti()   #光学元件对象
        self.optidict = {}      #光学元件参数
        self.sourcedict = {}    #光源
        self.abcs = []      #所有光线的abc参数
        self.nodes = []     #交点
        self.dots = []      #点对,用于绘图
        self.rays = []      #仍在传播的光线
        self.initpanel()    #初始化模板
    def initpanel(self):
        pass                #暂时不想写的地方可以用pass
    #设置透镜
    def setedge(self):
        pass

其中,光学元件包括位置、折射率、孔径、前表面曲率、后表面曲率等参数;光源信息包括位置、角度等信息,可初始化为:

self.optidict = {'xpos':300,'nopti':1,'diameter':100,
                 'lfocal':200,'rfocal':200}
self.sourcedict = {'xsource':10,'ysource':100,'theta':0}

在上述所有计算所得的数据中,彼此有很密切的关系。例如点对是由两个点组成,而每个点至少从属于一个点对。而从光线的传播角度出发,除了光源,每个节点都有父节点;除了最后的死点,每个点都有一个子节点。对于任意一点,只要遍历其所有子节点,就可以画出这个点组成的所有线段。

以上就是python光学仿真ui界面wxpython透镜演示系统框架的详细内容,更多关于wxpython框架的资料请关注其它相关文章!

相关推荐:

如何使用Python Selenium处理网页中的iframe框架?

iframe切换失败的典型表现是页面有iframe但找不到子元素、click()无反应、send_keys()无效;根本原因是Selenium默认只操作顶层文档,需显式切换上下文。 直接操作iframe内的元素一定会失败,因为WebDriver默认只在顶层文档中查找DOM;必须先用switch_to...

Python Web框架怎么选_Django与Flask在不同场景下的适用分析

Django适合中型业务系统,因其开箱即用的admin、ORM、auth等组件;Flask适合轻量、嵌入式或高度定制场景,如微服务或IoT网关。 什么时候该用Django而不是Flask 如果你要快速上线一个带用户管理、后台编辑、数据库迁移、API和权限控制的中型业务系统,Django是更省力的选择...

为什么Python 3.11的结构化模式匹配提升效率_实战演示match语法环境

match语句通过字节码级优化和单次结构探测替代链式if判断,减少重复取值与类型检查,在Python3.11+中实现更紧凑分支、更高JIT友好性及实际运行提速。 match语句本身不直接“提升运行时效率”,但它能显著减少冗余判断、避免重复解包、降低嵌套if深度,从而让代码更接近数据结构本质——这带来...