最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python光學(xué)仿真面向?qū)ο蠊鈱W(xué)元件類的實現(xiàn)

 更新時間:2021年10月19日 17:13:51   作者:微小冷  
這篇文章主要為大家介紹了python光學(xué)仿真面向?qū)ο蠊鈱W(xué)元件類的實現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

光學(xué)元件類

平面反射鏡是一種極為簡單的模型,因為我們只需要考慮一個平面即可。但是除此之外的其他光學(xué)元件,可能會變得有些復(fù)雜:我們必須考慮光在入射面和出射面的行為。

這當(dāng)然是一句廢話,而且我們也有了一個初步的解決方案:將光學(xué)元件拆成前表面和后表面即可。如果光需要在光學(xué)元件中反射多次,那就將光學(xué)元件拆成需要反射次數(shù)的表面?zhèn)€數(shù)即可,完美而無腦。

這說明我們已經(jīng)熟悉了程序員的思維,我們眼中的世界已經(jīng)不再是一個所見即所得的世界,我們看到的是一個個抽象零部件的表現(xiàn)。但是也不要驚慌,程序員和正常人也未必有很大的區(qū)別,因為我們除了可以將這個世界拆解,也可以將拆解之后的部件重新構(gòu)造回這個世界。

嘗試著將問題想得復(fù)雜一些,光學(xué)系統(tǒng)中有許多光學(xué)元件,光會透過每個光學(xué)元件很多次,而且每次的入射點、出射點都會有一定的偏差。由于光學(xué)元件可能會對光的能量有所吸收,從而引起發(fā)熱。而且每次的入射點、出射點不同,則發(fā)熱位置也不一樣。由于發(fā)熱會導(dǎo)致光學(xué)元件發(fā)生形變,所以下一次光和光學(xué)元件的作用也會發(fā)生變化。

也就是說,對于每個光學(xué)元件來說,除了有固定的前表面、后表面,還有入射點、出射點、發(fā)熱、形變等不斷變化的參數(shù)。這樣的一個過于實際的問題促使我們構(gòu)造一種更加貼近現(xiàn)實的數(shù)據(jù)類型,換句話說,我們要創(chuàng)建一個對象,這個對象能夠封裝各種變量和功能,我們輸入一個參量,這個對象的狀態(tài)也會跟著發(fā)生變化。

這就是所謂的面向?qū)ο蟆?/p>

class Opti():
    def __init__(self,edge1,edge2):
        self.edge1 = edge1
        self.edge2 = edge2

在上例中,我們定義了一個光學(xué)元件類,這個光學(xué)元件有兩個表面,這兩個表面既可以是平面,也可以說弧面。這樣,我們就建立了一個類。其中,__init__為初始化方法,self表示我們所創(chuàng)建的這個類本身。一般來說,如果類中的方法不加修飾符的話,就必須將self當(dāng)作第一個參數(shù)。

self.edge1表示這個Opti類中,有一個成員的名字叫edge1。當(dāng)這個類被初始化的時候,我們就可以對其進(jìn)行賦值了。

有些元件可能只有一個表面,比如全反鏡;有些可能有多個表面,比如偏振立方體。而且,我們在做實驗的時候,也需要對不同的光學(xué)元件進(jìn)行比較,從而得到最好的實驗結(jié)果。所以,如果我們想改變已經(jīng)建好的光學(xué)元件,應(yīng)該怎么辦呢?

其實很簡單,只要增加一個方法,使得可以插入或者刪除新的表面即可。

#文件Opti.py
class Opti():
    def __init__(self,edges=[[(0,-1),(0,1)],[(0,1),(0,-1),(1/2,0)]]):
        self.edges = [{'index':i,'dots':edges[i]}
                      for i in range(len(edges))]
    #edge格式為(dot1,dot2,...)
    def insertEdge(self,edge,albedo=0):
        self.edges.append(
            {'index':len(self.edges),'dots':edge})
    #可接受編號和點集
    def delEdge(self,edge):
        try:
            if isinstance(edge,list):   #如果edge的類型是list
                for edg in self.edges:
                    if edg['dots']==edge:
                        edge = edg['index']
            del self.edges[edge]
        except:
            print("no this edge")

在上面的代碼中,可以看到初始化函數(shù)被預(yù)設(shè)了一些值,這點與普通函數(shù)并無二致。我們可以看到,默認(rèn)插入的兩個曲面分別是平面[(0,-1),(0,1)]和弧面[(0,1),(0,-1),(1/2,0)],可見默認(rèn)生成一個平凸鏡。

成員變量self.edges即光學(xué)表面的列表,每個光學(xué)表面有兩個參數(shù),分別是索引index和點集dots。由此前的光學(xué)抽象可知,當(dāng)點對中有兩個點的時候,代表平面;有三個點的時候,代表弧面。

方法insertEdge為插入一個光學(xué)表面,其中,編號為這個光學(xué)表面在self.edges中的索引號;delEdge顧名思義為刪除某個光學(xué)表面。如果傳入的edge為一個列表,則說明傳入的是一個參數(shù)確定的曲面,此時通過遍歷self.edges找到這個表面,并得到其索引。

如果傳入的參數(shù)為一個單值,那么說明傳入的是索引號,所以直接刪除即可。

在這個方法中,使用了一種新的代碼塊try:...except...,這是一種異常機制,即嘗試運行try:塊中的代碼,如果運行失敗,則執(zhí)行except。如果我們沒能執(zhí)行成功delEdge,則說明我們輸入的表面并不在這個光學(xué)元件中,所以輸出"no this edge"。

這好像是第一次看到print這個命令呢,一般來說這應(yīng)該是最先接觸到的函數(shù),畢竟對于大多數(shù)程序員來說,敲下的第一行代碼就是

print("hello world")
print('hello world')

同時,我們除了數(shù)值類型之外,又認(rèn)識了另一種數(shù)據(jù)類型,即字符。在python中,可以通過雙引號或者單引號來表示單個字符或者字符串。即上述的hello world代碼中,兩行均正確,而且沒什么區(qū)別。

現(xiàn)在,我們已經(jīng)寫了一個類,于是可以創(chuàng)建一個對象,在命令行中輸入:

>>> from Opti import Opti
>>> Opti.__name__   #這是什么鬼
'Opti'
>>> x = Opti()      #創(chuàng)建對象,由于未輸入?yún)?shù),故皆為默認(rèn)值
>>> x.edges         #現(xiàn)實類成員
[{'index': 0, 'dots': [(0, -1), (0, 1)]}, {'index': 1, 'dots': [(0, 1), (0, -1), (0.5, 0)]}]
>>> x.delEdge(1)    #調(diào)用類方法
>>> x.edges         #果然少了一個邊
[{'index': 0, 'dots': [(0, -1), (0, 1)]}]
>>> x.delEdge(1)    #刪除不存在的邊是不可能的
no this edge
>>>

首先,from Opti import Opti的這兩個Opti并不相同,前者代表包`Opti.py',后者代表Opti.py中的類'Opti',import之后便可以調(diào)用了。

然后出現(xiàn)了一個比較吊詭的事情,我們在類中并沒有定義__name__,然而調(diào)用之后卻有值產(chǎn)生。

請勿驚慌,其實是老熟人了??梢詫?code>__name__理解為python內(nèi)部的內(nèi)置屬性,當(dāng)我們直接執(zhí)行某一.py文件時,這個__name__的值為__main__,否則的話就是類的名字。所以,到這個時候,我們似乎應(yīng)該能明白入口函數(shù)的真正意義了吧。

繼續(xù)向下,幾乎所有的事情就都不出所料了。

以上就是python光學(xué)仿真面向?qū)ο蠊鈱W(xué)元件類的實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于python光學(xué)元件類的實現(xiàn)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PyQt5每天必學(xué)之滑塊控件QSlider

    PyQt5每天必學(xué)之滑塊控件QSlider

    這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之滑塊控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python實現(xiàn)對字符串的加密解密方法示例

    Python實現(xiàn)對字符串的加密解密方法示例

    這篇文章主要介紹了Python實現(xiàn)對字符串的加密解密方法,結(jié)合實例形式分析了Python使用PyCrypto模塊進(jìn)行DES加密解密的相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • 在python image 中安裝中文字體的實現(xiàn)方法

    在python image 中安裝中文字體的實現(xiàn)方法

    今天小編大家分享一篇在python image 中安裝中文字體的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python基礎(chǔ)文件操作方法超詳細(xì)講解(詳解版)

    Python基礎(chǔ)文件操作方法超詳細(xì)講解(詳解版)

    文件就是操作系統(tǒng)為用戶或應(yīng)用程序提供的一個讀寫硬盤的虛擬單位,文件的核心操作就是讀和寫,這篇文章主要介紹了Python基礎(chǔ)文件操作方法超詳細(xì)講解的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • 用python3 返回鼠標(biāo)位置的實現(xiàn)方法(帶界面)

    用python3 返回鼠標(biāo)位置的實現(xiàn)方法(帶界面)

    今天小編就為大家分享一篇用python3 返回鼠標(biāo)位置的實現(xiàn)方法(帶界面),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python suds訪問webservice服務(wù)實現(xiàn)

    python suds訪問webservice服務(wù)實現(xiàn)

    這篇文章主要介紹了python suds訪問webservice服務(wù)實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python內(nèi)置函數(shù)map/filter/reduce詳解

    python內(nèi)置函數(shù)map/filter/reduce詳解

    在Python中,map(), filter(), 和 reduce() 是內(nèi)置的高級函數(shù)(實際是class),用于處理可迭代對象(如列表、元組等)的元素,這篇文章主要介紹了python內(nèi)置函數(shù)map/filter/reduce的相關(guān)知識,需要的朋友可以參考下
    2024-05-05
  • python利用opencv調(diào)用攝像頭實現(xiàn)目標(biāo)檢測

    python利用opencv調(diào)用攝像頭實現(xiàn)目標(biāo)檢測

    這篇文章主要為大家介紹了python利用opencv調(diào)用攝像頭實現(xiàn)目標(biāo)檢測的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python實現(xiàn)新版正方系統(tǒng)滑動驗證碼識別

    Python實現(xiàn)新版正方系統(tǒng)滑動驗證碼識別

    這篇文章主要介紹了基于Python實現(xiàn)新版正方系統(tǒng)滑動驗證碼識別算法和方案,文中示例代碼對我們的學(xué)習(xí)和工作有一定的幫助,感興趣的可以了解一下
    2021-12-12
  • Python實現(xiàn)查找最小的k個數(shù)示例【兩種解法】

    Python實現(xiàn)查找最小的k個數(shù)示例【兩種解法】

    這篇文章主要介紹了Python實現(xiàn)查找最小的k個數(shù),結(jié)合實例形式對比分析了Python常見的兩種列表排序、查找相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01

最新評論

桂林市| 英山县| 万源市| 惠东县| 彭州市| 江北区| 方正县| 怀来县| 北宁市| 尤溪县| 方山县| 察隅县| 临夏县| 金昌市| 潼关县| 卓尼县| 新乡县| 东平县| 固原市| 瑞丽市| 布拖县| 云阳县| 忻州市| 新闻| 黄大仙区| 孟村| 玉溪市| 金华市| 大方县| 甘南县| 宁远县| 连云港市| 思茅市| 法库县| 中牟县| 包头市| 泰兴市| 微山县| 合川市| 攀枝花市| 巩留县|