📜  弯曲表面的光折射(1)

📅  最后修改于: 2023-12-03 14:54:13.130000             🧑  作者: Mango

弯曲表面的光折射

弯曲表面的光折射是指光在经过弯曲表面时发生的折射现象。这种现象经常出现在透镜和曲面镜等光学器件中。

光折射定律

根据光折射定律,入射光线、法线和折射光线三者在同一平面上,折射角和入射角之间的比值等于两介质的折射率之比。在弯曲表面上,法线的方向随着表面的曲率而变化,折射角也相应发生变化。

计算弯曲表面的光折射

计算弯曲表面的光折射需要用到光学几何的知识。假设入射光线的折射率为 $n_i$,折射光线的折射率为 $n_r$,入射光线的入射角为 $\theta_i$,折射光线的折射角为 $\theta_r$,在弯曲表面上,法线和折射光线的夹角与入射角相等,即 $\alpha=\theta_i$。

根据光折射定律,可得:

$$\frac{\sin\theta_i}{\sin\theta_r}=\frac{n_r}{n_i}$$

结合正弦定理和余弦定理,可得:

$$\sin\theta_i=\frac{h}{\sqrt{r^2+h^2}}$$

$$\cos\theta_i=\frac{r}{\sqrt{r^2+h^2}}$$

$$\sin\theta_r=\frac{h}{\sqrt{r^2+h^2}}\cdot\frac{n_i}{n_r}$$

$$\cos\theta_r=\sqrt{1-\sin^2\theta_r}$$

其中,$h$ 为入射点到表面的垂线距离,$r$ 为表面的曲率半径。

示例代码

下面是示例代码,用于计算在球面镜上的光折射过程。

import math

# 计算曲率半径为 r 的球面镜上的光折射过程
def refract_on_sphere(r, n_i, n_r, x_i, y_i, z_i):
    # 计算入射点到球心的距离
    d = math.sqrt(x_i**2 + y_i**2 + z_i**2 - r**2)
    
    # 入射点到表面的垂线距离
    h = math.sqrt(d**2 - r**2)
    
    # 入射角的余弦值
    cos_theta_i = r / math.sqrt(h**2 + r**2)
    
    # 入射角
    theta_i = math.acos(cos_theta_i)
    
    # 折射角的正弦值
    sin_theta_r = n_i / n_r * math.sin(theta_i)
    
    # 折射角
    theta_r = math.asin(sin_theta_r)
    
    # 折射点到表面的垂线距离
    h_r = h * math.tan(theta_i - theta_r)
    
    # 折射点到球心的距离
    d_r = r - math.sqrt(r**2 - h_r**2)
    
    # 折射点的 x 坐标
    x_r = x_i * (d - d_r) / d
    
    # 折射点的 y 坐标
    y_r = y_i * (d - d_r) / d
    
    # 折射点的 z 坐标
    z_r = z_i * (d - d_r) / d
    
    return x_r, y_r, z_r

以上示例代码用于计算在球面镜上的光折射过程,输入参数包括曲率半径、入射介质折射率、折射介质折射率以及入射点坐标。输出参数为折射后的点坐标。这个函数的计算过程可以被运用用于设计和优化光学器件,比如激光器和光学仪器等。