几何向量:计算光线折射refract向量

紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79466517

        其实光线除了反射现象外,还有折射现象,打个比方,你看水塘中鱼儿游动,表面上看起来鱼儿很贴近水面,同时也感觉水底很浅,结果一脚捅下去,直接没到大腿了,这就是光的折射产生的一种视觉欺骗。

        光线折射的产生,其实是因为光线通过不同介质所产生的“偏折”现象。

        ps:光线的“偏折”现象实际上和光的粒子性有关,这里我随便聊一下,光的波粒二象性说明光子也是粒子,光子的吸收与发出遵守粒子的几率布,光的运动路线,也就是光子吸收、发出的最大几率的地方,当然物理学中也认可光是几率波,由于光的运动路线是光子被吸收,发出的最大几率的地方,那么光线的方向,就会向着吸收、发出光的可能性多的前进,也就是那个方向吸收这种光子的可能性大,就向这个方向偏折,我们假设光子在真空中,单位时间内被吸收、发出了N次,而在介质中,在相同的时间内被吸收、发出了M次,光子本身的速度不变,由于被吸收发出,运动路程减少,速度减小,那么,则,当光线以角入射到界面上的时候,由于光子的法线方向吸收光子、发出光子的可能性大,光线应该向着法线方向偏折。回到正题,这里我们是来学习图形学的,我们暂时只来讨论光的折射:光从一种介质斜射入另一种介质时,传播方向发生改变,从而使光线在不同介质的交界处发生偏折

        这里来绘画一幅图看一下上面水塘的现象,如下图:

眼睛欺骗了我们,让我们把虚拟鱼的坐标当成了真实鱼的坐标。

计算机图形学中,我们利用斯涅尔定律表示折射:

斯涅尔定律是描述光或其他的波,从一个介质进入另一介质,入射角与折射角关系的一个公式,此定律得到入射角的正弦值与折射角的正弦值的比值为一定值,而此一定值跟入射与折射介质有关。

公式也简单:n1 * sinθ1 = n2 * sinθ2,

其中n1,n2表示两种介质的折射率。

如下图:


ps:一般情况下,我们认为真空中(或者说空气中)折射率n = 1,毕竟我们起码要选取一个标准阀值,来推导其他介质的折射率,这里直接规定真空(空气)为标准1,那么其他介质的折射率都比真空要大,也就是>1。

那么接下来我们通过入射光线计算折射光线,如下图:


我们通过建立单位圆辅助计算,通过标量推导出向量的模长,然后通过向量平行和同异方向推导出向量,推出OB = OD + DB = -|cosβ|*OE + |sinβ/sinθ|*(AO + |cosθ|* OE),推导到这里,我们就把OB的公式用cos sin以及入射光向量AO和介质法向量N来计算了,这时候我们就思考如何计算cosβ cosθ,让这两个值使用已知的n1,n2,AO,OE来替换,如下图:


我们通过斯涅尔定律:n1 * sinθ = n2 * sinβ得到sinβ = n1/n2 * sinθ

点积的概念推出cosθ

cosβ的推导可以先试用sinβ替换,然后替换斯涅尔定律中计算的sinβ得到cosθ的表示,

这个时候我们所有的未知量就全部通过已知值(n1,n2,AO,OE)来表示了,如下图:


算出来的公式咋一看十分复杂,接下来我们就要通过程序来进行模拟验证,如下图:


验证程序下载地址:https://download.csdn.net/download/yinhun2012/10275193




猜你喜欢

转载自blog.csdn.net/yinhun2012/article/details/79472364