光线折射公式推导:Snell‘s Law

光线折射公式推导:Snell’s Law

Figure 1

设 入射光 i \mathbf{i} i 和 折射光 t \mathbf{t} t 均为单位向量,由Snell’s law可知 η i sin ⁡ θ i = η t sin ⁡ θ t \eta_i \sin \theta_i = \eta_t \sin \theta_t ηisinθi=ηtsinθt

其中 η i , η t \eta_i,\eta_t ηi,ηt 为反射系数(typically air = 1.0, glass = 1.3–1.7, diamond = 2.4)。

因为 sin ⁡ θ i = ∣ i ∥ ∣ ∣ i ∣ ,   sin ⁡ θ t = ∣ t ∥ ∣ ∣ t ∣ \sin\theta_i=\cfrac{|\mathbf{i}_{\parallel}|}{|\mathbf{i}|},\ \sin\theta_t=\cfrac{|\mathbf{t}_{\parallel}|}{|\mathbf{t}|} sinθi=ii, sinθt=tt ,故:
η i ∣ i ∥ ∣ ∣ i ∣ = η t ∣ t ∥ ∣ ∣ t ∣ η i ∣ i ∥ ∣ = η t ∣ t ∥ ∣ \begin{matrix} \eta_i \cfrac{|\mathbf{i}_{\parallel}|}{|\mathbf{i}|} = \eta_t \cfrac{|\mathbf{t}_{\parallel}|}{|\mathbf{t}|} \\ \eta_i |\mathbf{i}_{\parallel}| = \eta_t |\mathbf{t}_{\parallel}| \\ \end{matrix} ηiii=ηtttηii=ηtt
又因 i \mathbf{i} i t \mathbf{t} t 平行且方向相同:
η i ⋅ i ∥ = η t ⋅ t ∥ t ∥ = η i η t ⋅ i ∥ = η i η t ( i + cos ⁡ θ i ⋅ n ) \begin{matrix} \eta_i \cdot \mathbf{i}_{\parallel} &=& \eta_t \cdot \mathbf{t}_{\parallel}& \\ \mathbf{t}_{\parallel} &=& \cfrac{\eta_i}{\eta_t} \cdot \mathbf{i}_{\parallel} \\ &=& \cfrac{\eta_i}{\eta_t} (\mathbf{i}+\cos \theta_i\cdot \mathbf{n} ) \end{matrix} ηiit===ηttηtηiiηtηi(i+cosθin)
其中 i ∥ = i ⋅ n ∣ i ∣ ∣ n ∣ n = cos ⁡ θ i ⋅ n \mathbf{i}_{\parallel}=\cfrac{\mathbf{i}\cdot \mathbf{n}}{|\mathbf{i}| |\mathbf{n}|}\mathbf{n}=\cos \theta_i \cdot \mathbf{n} i=ininn=cosθin.

又因 t = t ⊥ + t ∥ \mathbf{t}=\mathbf{t}_{\perp}+\mathbf{t}_{\parallel} t=t+t ∣ t ∣ 2 = ∣ t ⊥ ∣ 2 + ∣ t ∥ ∣ 2 |\mathbf{t}|^2=|\mathbf{t}_{\perp}|^2 + |\mathbf{t}_{\parallel}|^2 t2=t2+t2
∣ t ⊥ ∣ 2 = ∣ t ∣ 2 − ∣ t ∥ ∣ 2 ∣ t ⊥ ∣ = 1 − ∣ t ∥ ∣ 2 t ⊥ = − 1 − ∣ t ∥ ∣ 2 ⋅ n \begin{matrix} |\mathbf{t}_{\perp}|^2 &=& |\mathbf{t}|^2-|\mathbf{t}_{\parallel}|^2 \\ |\mathbf{t}_{\perp}| &=& \sqrt {1-|\mathbf{t}_{\parallel}|^2} \\ \mathbf{t}_{\perp} &=& -\sqrt {1-|\mathbf{t}_{\parallel}|^2}\cdot \mathbf{n} \\ \end{matrix} t2tt===t2t21t2 1t2 n
从而:
t = t ∥ + t ⊥ \mathbf{t}=\mathbf{t}_{\parallel}+\mathbf{t}_{\perp} t=t+t

// r_in 为射入物体的光线
vec3 refract(const vec3& r_in, const vec3& outward_normal, double etai_over_etat) {
    double cos_thetai = dot(-r_in, outward_normal);
    vec3 r_out_parallel =  etai_over_etat * (r_in + cos_thetai * outward_normal);
    vec3 r_out_perp = -sqrt(1.0 - r_out_parallel.length_squared()) * outward_normal;
    return r_out_perp + r_out_parallel;
}

也可进一步化简:
t = t ∥ + t ⊥ = η i η t ⋅ ( i + cos ⁡ θ i ⋅ n ) − 1 − ∣ i ∥ ∣ 2 ⋅ n = η i η t ⋅ ( i + cos ⁡ θ i ⋅ n ) − 1 − sin ⁡ 2 θ t ⋅ n = η i η t ⋅ i + ( η i η t cos ⁡ θ i − 1 − sin ⁡ 2 θ t ) ⋅ n \begin{matrix} \mathbf{t} &=&\mathbf{t}_{\parallel}+\mathbf{t}_{\perp} \\ &=&\cfrac{\eta_i}{\eta_t} \cdot (\mathbf{i}+\cos \theta_i\cdot \mathbf{n}) -\sqrt {1-|\mathbf{i}_{\parallel}|^2}\cdot \mathbf{n} \\ &=&\cfrac{\eta_i}{\eta_t} \cdot (\mathbf{i}+\cos \theta_i\cdot \mathbf{n}) -\sqrt {1-\sin ^2\theta_t}\cdot \mathbf{n} \\ &=&\cfrac{\eta_i}{\eta_t} \cdot \mathbf{i}+\left (\cfrac{\eta_i}{\eta_t} \cos \theta_i -\sqrt {1-\sin ^2\theta_t} \right) \cdot \mathbf{n} \end{matrix} t====t+tηtηi(i+cosθin)1i2 nηtηi(i+cosθin)1sin2θt nηtηii+(ηtηicosθi1sin2θt )n
由Snell’s law公式可得 sin ⁡ θ t = η i η t ⋅ sin ⁡ θ i \sin \theta_t=\cfrac{\eta_i}{\eta_t} \cdot \sin \theta_i sinθt=ηtηisinθi
t = η i η t ⋅ i + ( η i η t cos ⁡ θ i − 1 − ( η i η t ) 2 sin ⁡ 2 θ i   ) ⋅ n = η i η t ⋅ i + ( η i η t cos ⁡ θ i − 1 − ( η i η t ) 2 ( 1 − cos ⁡ 2 θ i ) ) ⋅ n \begin{matrix} \mathbf{t} &=&\cfrac{\eta_i}{\eta_t} \cdot \mathbf{i}+ \left ( \cfrac{\eta_i}{\eta_t} \cos \theta_i -\sqrt {1-(\cfrac{\eta_i}{\eta_t})^2\sin^2 \theta_i}\ \right ) \cdot \mathbf{n} \\ &=&\cfrac{\eta_i}{\eta_t} \cdot \mathbf{i}+ \left (\cfrac{\eta_i}{\eta_t} \cos \theta_i -\sqrt {1-(\cfrac{\eta_i}{\eta_t})^2(1-\cos^2 \theta_i)}\right ) \cdot \mathbf{n} \\ \end{matrix} t==ηtηii+ηtηicosθi1(ηtηi)2sin2θi  nηtηii+ηtηicosθi1(ηtηi)2(1cos2θi) n
其中 cos ⁡ θ i = i ⋅ n ∣ i ∣ ∣ n ∣ = i ⋅ n \cos\theta_i=\cfrac{\mathbf{i}\cdot \mathbf{n}}{|\mathbf{i}| |\mathbf{n}|}=\mathbf{i}\cdot \mathbf{n} cosθi=inin=in

全反射现象 Total internal reflection

对于Snell’s law 的公式 sin ⁡ θ t = η i η t ⋅ sin ⁡ θ i \sin \theta_t=\cfrac{\eta_i}{\eta_t} \cdot \sin \theta_i sinθt=ηtηisinθi ,当空气中的反射率大于物体内的反射率的时候,有可能会出现 η i η t ⋅ sin ⁡ θ i > 1 \cfrac{\eta_i}{\eta_t} \cdot \sin \theta_i>1 ηtηisinθi>1 的情况。

但是 sin ⁡ θ t \sin\theta_t sinθt 的值一定是小于1的,故等式不可能成立。这个时候光线应该被反射,而不是折射。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值