Python光學(xué)仿真wxpython透鏡演示系統(tǒng)框架
透鏡演示系統(tǒng)
框架
現(xiàn)在,我們可以做一個(gè)具備友好界面的透鏡演示系統(tǒng)了。我們需要兩個(gè)圓弧來(lái)表示透鏡,一條線段表示主光軸,多條線段表示光線的傳播路徑。此外,還需要對(duì)光源和透鏡的參數(shù)進(jìn)行調(diào)節(jié)。
然而值得注意的一點(diǎn)是,我們?cè)谶M(jìn)行計(jì)算和畫(huà)圖過(guò)程中所用到的幾何圖形,在表達(dá)形式以及操作流程上可能并不相同。例如,對(duì)于光源發(fā)出的一條射線,它與透鏡的作用流程為
- 尋找與透鏡前表面的交點(diǎn)A
- 獲取反射和透射直線
- 尋找透射直線與透鏡后表面的交點(diǎn)B
- 計(jì)算透過(guò)透鏡的直線
然而對(duì)于畫(huà)圖程序來(lái)說(shuō),光源S和A之間有一條線段,A和B之間有一條線段,若想畫(huà)出透過(guò)透鏡的線段,則必須先確定這條線段的另一個(gè)端點(diǎn)。也就是說(shuō),在求解反射、透射光線的過(guò)程中,所得到的光線表達(dá)式對(duì)于畫(huà)圖來(lái)說(shuō)并無(wú)意義,只有端點(diǎn)是有意義的。
至此,即可得到這個(gè)小程序中必不可少的一些數(shù)據(jù),包括光源參數(shù)、透鏡參數(shù)、光線與表面的交點(diǎn),光線端點(diǎn)組成的點(diǎn)對(duì),所有光線的表達(dá)式,當(dāng)前仍在傳播的光線的表達(dá)式等。
于是可以建立如下代碼:
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() #光學(xué)元件對(duì)象
self.optiDict = {} #光學(xué)元件參數(shù)
self.sourceDict = {} #光源
self.abcs = [] #所有光線的abc參數(shù)
self.nodes = [] #交點(diǎn)
self.dots = [] #點(diǎn)對(duì),用于繪圖
self.rays = [] #仍在傳播的光線
self.InitPanel() #初始化模板
def InitPanel(self):
pass #暫時(shí)不想寫(xiě)的地方可以用pass
#設(shè)置透鏡
def setEdge(self):
pass
其中,光學(xué)元件包括位置、折射率、孔徑、前表面曲率、后表面曲率等參數(shù);光源信息包括位置、角度等信息,可初始化為:
self.optiDict = {'xPos':300,'nOpti':1,'Diameter':100,
'lFocal':200,'rFocal':200}
self.sourceDict = {'xSource':10,'ySource':100,'theta':0}
在上述所有計(jì)算所得的數(shù)據(jù)中,彼此有很密切的關(guān)系。例如點(diǎn)對(duì)是由兩個(gè)點(diǎn)組成,而每個(gè)點(diǎn)至少?gòu)膶儆谝粋€(gè)點(diǎn)對(duì)。而從光線的傳播角度出發(fā),除了光源,每個(gè)節(jié)點(diǎn)都有父節(jié)點(diǎn);除了最后的死點(diǎn),每個(gè)點(diǎn)都有一個(gè)子節(jié)點(diǎn)。對(duì)于任意一點(diǎn),只要遍歷其所有子節(jié)點(diǎn),就可以畫(huà)出這個(gè)點(diǎn)組成的所有線段。
以上就是Python光學(xué)仿真UI界面wxpython透鏡演示系統(tǒng)框架的詳細(xì)內(nèi)容,更多關(guān)于wxpython框架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
django中間件及自定義中間件的實(shí)現(xiàn)方法
中間件就是在目標(biāo)和結(jié)果之間進(jìn)行的額外處理過(guò)程,在Django中就是request和response之間進(jìn)行的處理,相對(duì)來(lái)說(shuō)實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,這篇文章主要介紹了django中間件以及自定義中間件?,需要的朋友可以參考下2023-06-06
Django中數(shù)據(jù)庫(kù)遷移常用的命令小結(jié)
在Django中數(shù)據(jù)庫(kù)遷移用于保持?jǐn)?shù)據(jù)庫(kù)結(jié)構(gòu)與模型定義同步,這篇文章主要介紹了Django中數(shù)據(jù)庫(kù)遷移常用的命令,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
Python實(shí)現(xiàn)批量修改指定目錄下圖片的大小
批量修改指定目錄下圖片大小通常是在需要對(duì)大量圖片進(jìn)行統(tǒng)一處理的情況下使用的,本文主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)批量修改圖片大小,需要的可以參考下2023-10-10
Python學(xué)習(xí)之圖片濾鏡效果的實(shí)現(xiàn)
濾鏡效果是圖像處理中常用的一種技術(shù),可以用來(lái)增強(qiáng)圖像的視覺(jué)效果,實(shí)現(xiàn)不同的效果,本文就來(lái)利用Python中的Image模塊實(shí)現(xiàn)常見(jiàn)的幾個(gè)圖片濾鏡吧2023-05-05
Python 安裝setuptools和pip工具操作方法(必看)
下面小編就為大家?guī)?lái)一篇Python 安裝setuptools和pip工具操作方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Python自動(dòng)化構(gòu)建工具scons使用入門筆記
這篇文章主要介紹了Python自動(dòng)化構(gòu)建工具scons使用入門筆記,本文講解了安裝scons、scons常用命令、scons使用示例等內(nèi)容,需要的朋友可以參考下2015-03-03

