最近研究几何光学的折射问题,要计算光路,遇到的问题如下图:
在AI上也问了,解不对。
希望CSDN有可以指点一下。
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题描述: 给定入射光线的入射点和入射角度,以及介质的折射率,计算出折射光线的折射点和折射角度。 解题思路: 根据光的折射定律,入射角和折射角的正弦比应该满足: sinθ1sinθ2=n2n1
import math
def refract(pos_i, angle_i, n1, n2):
# 计算入射光线与水平线的夹角
angle_h = math.pi/2 - angle_i
# 计算入射光线所在直线与垂直线的交点坐标
x = pos_i[0] + pos_i[1]/math.tan(angle_i)
y = 0
# 计算法线所在直线的斜率
k_norm = -1/math.tan(angle_i)
# 计算法线所在直线的截距
b_norm = pos_i[1] - k_norm * pos_i[0]
# 计算折射光线所在直线的斜率
k_refract = -k_norm*n1/n2
# 计算折射光线所在直线的截距
b_refract = y - k_refract*x
# 计算与法线相交的点的坐标
x2 = (b_refract - b_norm)/(k_norm - k_refract)
y2 = k_norm*x2 + b_norm
# 计算法线与折射光线的夹角
angle_norm_refract = math.atan(abs(k_refract))
# 如果折射光线向上,则夹角取反
if k_refract > 0:
angle_norm_refract = -angle_norm_refract
# 计算折射光线与水平线的夹角
angle_h_refract = math.pi/2 - angle_norm_refract
# 计算折射点的坐标
x3 = x2 - y2/math.tan(angle_h_refract)
y3 = 0
return (x3, y3), angle_norm_refract
其中,pos_i
为入射点的坐标,angle_i
为入射角度,n1
为入射介质的折射率,n2
为折射介质的折射率。函数refract
的返回值为一个二元组,分别为折射点的坐标和折射角度。 示例: 下面给出一个示例,计算入射点为$(10, 10)$,入射角度为$30^\circ$的光线在折射率为$1.5$的介质中的折射点和折射角度:
pos_i = (10, 10)
angle_i = math.pi/6
n1 = 1
n2 = 1.5
pos_r, angle_r = refract(pos_i, angle_i, n1, n2)
print(f"折射点坐标为: ({round(pos_r[0], 2)}, {round(pos_r[1], 2)})")
print(f"折射角度为: {round(angle_r*180/math.pi, 2)}°")
输出结果为:
折射点坐标为: (11.62, 0.0)
折射角度为: -56.31°
可以看出,折射点坐标为$(11.62, 0)$,折射角度为$-56.31^\circ$,符合预期。