Lens 表面入射光最大角度計算Macro
大家都知道,基於近軸光學的一些考慮,我們需要考慮光線的走向,在這裡分享一個計算Lens表面光線最大入射角的Macro,並進行作圖
近軸光學顯示光線的角度在30度以內的時候,此時近軸近似的誤差大約在3%左右,對於不同的折射率會有些許差異,對於較大的折射率該角度會再小一些。,所以在一個真實的lens裡面我們如何來考慮這個值呢?
在軟體裡,我們很容很知道特定特定表面,視場,瞳位置的光線入射角度,但是對於多個面,多視場,不同瞳位置考慮時,則比較麻煩,很難進行快速的顯示,這也就是想寫這個Macro的原因
如下,我們要檢視7th面的最大角度時,則需要分別檢視主光線和邊緣光線,當面比較多的時候,看起來就更麻煩了
主光線
邊緣光線
如下是軟體自帶一個雙高斯鏡頭設計,下面就以這個例子進行演示:
鏡頭Layout
這裡並沒有去區別主光線和邊緣光線,這裡進行了統一的考慮
Macro圖
Macro results
同時如果我們將這些值作為返回值,返回到MFE中,這樣就可以進行光線走向的最佳化,省去了大量編輯運算元的麻煩。
Macro 正文如下:
!………………………………………………………………………………………………………………………………………………
!Macro: Max Angle。zpl
!Calculate the max angle of lens surface
!————————————————————————————————————
!————————————————————————————————————-
SAVEMERIT “C:\Users\XXXXX\Documents\Zemax\MeritFunction\CURRENTMERIT。MF”
SETVIG
DELETEMFO ALL
UPDATE ALL
SAMPLING=100
DECLARE A,DOUBBLE,3,NSUR(),SAMPLING+1,SAMPLING+1
DECLARE B,DOUBBLE,1,NSUR()
DECLARE kk,DOUBBLE,1,NSUR()
DECLARE SYSBA,DOUBBLE,1,1
SYSBA(1)=0
INSERTMFO
SETOPERAND 1, 11, “RAID”
FOR K=1,NSUR(),1
SETOPERAND 1,2,K
FORMAT 4。2
B(K)=0
KK(K)=K
FOR I=1,SAMPLING+1,1
SETOPERAND 1,5,(1/SAMPLING*(I-1))
FOR J=1,SAMPLING+1,1
SETOPERAND 1,7,(1/SAMPLING*(J-1))
A(K,I,J)=MFCN()
IF(A(K,I,J)>B(K)) THEN B(K)=A(K,I,J)
NEXT
NEXT
PRINT“Number ”,K,“ Surface ‘s Max Angle is:”,B(K)
IF(B(K)>SYSBA(1)) THEN SYSBA(1)=B(K)
NEXT
PRINT“System Max Angle is :”,SYSBA(1)
UPDATE ALL
LOADMERIT “C:\Users\XXXXX\Documents\Zemax\MeritFunction\CURRENTMERIT。MF”
PRINT “!————————————————————————————————————-”
!————————————————————————————————————-
!Plot the Angle
PLOT NEW
PLOT DATA,kk,B,NSUR(),1,0,0
PLOT TITLE,“Max Angle of Surface”
PLOT TITLEY,“Incidence Angle (degrees)”
PLOT FORMATX,“%2。0f”
PLOT FORMATY,“%4。2f”
PLOT TITLEX,“Surface Number”
PLOT BANNER, “Surface number VS Max Angle”
PLOT RANGEX, 1,NSUR()
PLOT RANGEY, 0, 40
PLOT COMM3, “System Max angle = ”,$STR(SYSBA(1)),“degrees”
PLOT GO
!…………………………………………………………………………。。。。結束……………………………………………………。