菲涅尔透镜在日常生活中很常见,比如PIR透镜、VR镜片、Flash透镜。。。那我们如何将非球面转化为等价的菲涅尔面呢?如下所示,这是我用python编写的一个小程序,用来把非球面转化为等sag的菲涅尔面,那我们今天就来讲讲这个思路,怎么来达成这个效果。
Step1,给定非球面系数。比如我们这里,R=-27,K=-1。
Step2,给定表面的尺寸。通常表面是旋转对称的,那我们只需要把一半尺寸进行转换就可以。例如这个表面直径是40,那我们需要处理的大小就是D=20。
Step3,给定计算的步长。由于面是由一个个点构成的,因此要绘制这个曲线,就需要给定计算的步长,步长可以在一定范围灵活选择。比如我这里选择step=0.002
Step4,给定需要的sag深度。为了绘图更加直观,我这里距离sag=1.0
y = np.arange(0, D+step, step)
def ASP_Surf_Sag(y, R, K=0, A4=0, A6=0, A8=0。。):
c = 1/R
Surf_Sag = c*y**2/(1+(1-(1+K)*c**2*y**2)**0.5) + A4*y**4 + A6*y**6 + A8*y**8 。。
return Surf_Sag
x = ASP_Surf_Sag(y, R, K)
其中,y对应非球面的纵坐标,x对应非球面的横坐标,也就是每个点对应的sag值。
deep_x = (-1)*(abs(x) % Sag)
也就是说,用实际sag去和需要的sag进行取余运算,就得到fresnel的sag量
plt.figure(figsize=(6,7.5))
plt.suptitle(‘Fresnel Surface Convert Tool’)
plt.title(‘Asphere Surface’)
plt.title(‘Fresnel Surface’)
实际加工的时候,每个齿都是有一定拔模角的,那假设我们现在每个齿有5°的拔模角,那这个转换工具又该怎么写呢?以下为5°拔模角的效果图,大家动手来试试吧!
除了这种等sag的菲涅尔面,有时候也存在等pitch的面,就是菲涅尔的齿距相等,这个时候每个齿的深度是不一样的,结果如下所示,这种面型要怎么转换呢,大家来试试吧。