最近看到一篇介绍光学系统中球差的文章,但是还是没怎么看懂,没有解释具体是什么原因导致的,最开始我的理解是是加工球面透镜导致的吗?还是其他原因,所以自己动手验证了下,最终发现是球面透镜本身的问题,就是说球面透镜就一定有球差,证明过程如下:
由上图所示,平行光的入射角为Θ1,出射角为Θ2, 折射光线与光轴夹角为Θ3, 可以根据三角形关系,算出Θ3 = Θ2 – Θ1,同时球面透镜的折射率为n1, 空气的折射率为n2, 球面透镜的半径为R,D为球面透镜球心到出射光线与光轴的交点的距离,那么我们可以用现有的参数对距离D进行一个计算:
由光的折射定律可以得到Θ1和Θ2的关系:
sinΘ1 * n1 = sinΘ2 * n2 …………(1)
由三角函数的正弦定理由:
|OQ| / sin(Θ3) = |OP| / sin(180 – Θ2) …………(2)
由公式1和公式2可以得到:
D = sin(180 – arcsin(n1 * sin(Θ1)/n2)) * R / sin(arcsin (n1 * sin(Θ1)/n2) – Θ1)
这里我们为了直接验证球差,取n1 = 1.0, n2 =1.49, R= 2;
然后我们可以通过修改入射角度Θ1,由计算机求出D的数值
当 Θ1 = 1, D = 6.08025244576
当 Θ1 = 2, D = 6.07611132207
当 Θ1 = 3, D = 6.06920776857
当 Θ1 = 4, D = 6.05953923567
当 Θ1 = 5, D = 6.04710209627
当 Θ1 = 10, D = 4.78090164949
当 Θ1 = 20, D = 5.52121267235
当 Θ1 = 30, D = 5.94317582023
以及入射角由1-30变化的曲线图如下所示:
可以看出,随着入射角度的变变大,也就是入射光线远离光轴,|OP|
是越来越小的,反映出对远离光轴的入射光线的折射能力大,导致的结果就是近轴和远轴的折射光线不能聚焦到一点,从而产生球差。
所以!球差产生的原因是:球面透镜本身就存在的问题,不是加工球面透镜精度的问题。
上述计算距离以及画图的python代码如下:
#-*- encoding=utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import math
R = 2 # 半径
n2 = 1.49
n1 = 1.0
def fun(x):
x = math.radians(x)
return R*math.sin((math.radians(180 - math.degrees(math.asin((n2/n1) * math.sin(x)))))) / math.sin(math.asin((n2/n1) * math.sin(x)) - x)
x = np.linspace(1, 30, 300)
y = [fun(value) for value in x]
plt.plot(x, y)
plt.xlabel('Incident Angle')
plt.ylabel('Distance')
plt.savefig(r'xxxx' + '.png') # xxxx这里替换为自己电脑的文件路劲就行,例如: D:\
plt.show()