人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Python光學(xué)仿真學(xué)習(xí)衍射算法初步理解

發(fā)布日期:2021-12-22 16:14 | 文章來(lái)源:gibhub

對(duì)衍射最經(jīng)典的解釋是Huygens-Fresnel原理,Huygens認(rèn)為波陣面上每一點(diǎn)都會(huì)成為新的波源,這些子波源的相互干涉就形成了衍射。這顯然是一種離散的觀點(diǎn),仿佛是專門為程序員準(zhǔn)備的一樣。

假設(shè)一束光打在一個(gè)方形孔上,這個(gè)方形孔被細(xì)分成 n×n個(gè)網(wǎng)格,那么每個(gè)網(wǎng)格都相當(dāng)于是一個(gè)小孔,而這些小孔的互相干涉,即為衍射。隨著網(wǎng)格不斷被細(xì)分,最終可以逼近真實(shí)的衍射情形。那么,假設(shè)矩孔處為等相位面,其網(wǎng)格坐標(biāo)為 (i,j),到衍射屏距離為 d d d,那么對(duì)于衍射屏上任意一點(diǎn)P(x,y),其光強(qiáng)為

同理,我們剛剛寫下的平面矩孔光強(qiáng)疊加也出現(xiàn)了問(wèn)題,如果我們默認(rèn)矩孔上每個(gè)格點(diǎn)都是一個(gè)點(diǎn)光源,那么打在衍射屏上之后,應(yīng)該遵從球面波的衰減原則。又因?yàn)檫@種假設(shè)其實(shí)忽略了從光源射到矩孔過(guò)程中的光線的傳播方向,所以應(yīng)該有一個(gè)傾斜因子,即 ( i , j ) 點(diǎn)打在 ( x , y )點(diǎn)的光強(qiáng)為

#基爾霍夫衍射,衍射屏坐標(biāo)范圍-dGrid:dGrid,光源坐標(biāo)(0,0)
#簡(jiǎn)單的矩孔衍射,dSource為光源到小孔的距離;dScreen為衍射屏到小孔距離
#dHole為矩孔網(wǎng)格尺寸;dGrid為衍射屏網(wǎng)格尺寸;nGrid為網(wǎng)格數(shù)目
def squareDiff(dSource=1,dScreen=1.4,dWave=1e-6,
dHole=3e-5,nGrid=100,dGrid=1e-5):
 nX,nY = nGrid*np.array([1,1])
 axisX = np.arange(-nX,nX+1)*dGrid 
 axisY = np.arange(-nY,nY+1)*dGrid
 xAxis,yAxis = np.meshgrid(axisX,axisY)  #此為衍射屏的x坐標(biāo)
 axisX = np.arange(-nX,nX+1)*dHole 
 axisY = np.arange(-nY,nY+1)*dHole
 xHole,yHole = np.meshgrid(axisX,axisY)  #此為矩孔的x坐標(biāo)
 dArrS = np.sqrt(xHole**2+yHole**2+dSource**2)#孔平面到光源的距離
 nSide = int(nGrid*2+1)  #格點(diǎn)個(gè)數(shù)
 pane = np.zeros([nSide,nSide])#衍射屏強(qiáng)度
 for m in range(nSide):
  for n in range(nSide):
dArr = np.sqrt((xHole-xAxis[m,n])**2+(yHole-yAxis[m,n])**2+dScreen**2)
pane[m,n] = np.sum(
 np.cos(np.pi*2*(dArr+dArrS)/dWave)/dArr/dArrS)
 pane = np.abs(pane)
 pane = pane/np.max(np.array(pane))
 fig = plt.figure()
 ax = axd(fig)
 ax.plot_surface(xAxis,yAxis,pane)
 plt.show()
 return pane, xAxis, yAxis

其結(jié)果為

故可定義矩陣索引

#輸入對(duì)于M*M矩陣的第一個(gè)值到N*N矩陣的距離,返回M(m,n)的距離矩陣
def getDisMat(dMat,N,m,n):
 dMat = np.mat(dMat)
 A = dMat[1:m,1:n]
 B = dMat[1:m,0:N-n+1]
 C = dMat[0:N-m+1,1:n]
 D = dMat[0:N-m+1,0:N-n+1]
 return np.vstack((np.hstack((np.flip(A),np.flipud(B))),np.hstack((np.fliplr(C),D)))) #stack矩陣拼接,flip翻轉(zhuǎn)矩陣

相應(yīng)地算法改為(其他位置不變)

 dArrS = np.sqrt(xHole**2+yHole**2+dSource**2) #孔平面到光源的距離
 dScreen = np.sqrt( #衍射平上第(0,0)個(gè)點(diǎn)的距離矩陣
  (xHole-xAxis[0,0])**2+(yHole-yAxis[0,0])**2+dScreen**2)
 nSide = int(nGrid*2+1)  #格點(diǎn)個(gè)數(shù)
 pane = np.zeros([nSide,nSide])#衍射屏強(qiáng)度
 for m in range(nSide):
  for n in range(nSide):
dArr = getDisMat(dScreen,nSide,m,n)

但這種優(yōu)化是極其有限的,這是直觀無(wú)腦的思維方式所帶來(lái)的麻煩。在接下來(lái)的傅里葉光學(xué)中,我們將繼續(xù)處理衍射的計(jì)算問(wèn)題。

以上就是Python光學(xué)仿真學(xué)習(xí)衍射算法初步理解的詳細(xì)內(nèi)容,更多關(guān)于Python光學(xué)仿真衍射算法的資料請(qǐng)關(guān)注本站其它相關(guān)文章!

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部