文章目录
- 一、光线追迹
- 二、离散空间的折射率及其梯度求解
- 1.折射率计算
- 2.折射率梯度计算
- 3.光线追迹方案
一、光线追迹
光线追迹的基本思想是:光线在折射率均匀的介质中是沿直线传播的,但在变折射率介质中光是沿曲线传播的。如果将变折射率介质按照一定规律(可以沿光轴方向或者沿光线方向)分成很多小段,并且认为光线只在各小段之间的边界上发生折射、而在各小段内部是沿直线传播的,如下图所示。本算法采用无限逼近的思想,逐步计算出光线的近似轨迹,计算的步长在计算中可以是确定的,也可以根据情况进行调整。当把变折射率介质分成足够多的小段时,就能得到光线的近似轨迹。
光线方程是光线在变折射率介质中的运动轨迹的基本方程。其描述为:
二、离散空间的折射率及其梯度求解
1.折射率计算
在离散空间内,已知各离散点上的折射率,需要求解其他空间任意点的折射率,通常采用插值法。本方案采用稳定性和精度均较好的反距离加权平均插值法。
在三维离散空间内,相邻八个节点构成一个单元,如图2所示。已知单元的八个定点的折射率为ni ( i = 1,2,…,8),设点P到八个点(xi,yi,zi )的距离为di,求解单元内部任一点P的折射率 nP,采用反距离加权平均插值算法如下:
权重函数:
计算结果:
其中
2.折射率梯度计算
求解离散空间任一点的折射率梯度,需要先求解离散点本身的梯度值,然后再根据该点周围离散点的梯度,利用距离加权插值求解该点的梯度值。其中后者的插值方法在前面已经介绍,这里主要讨论离散点本身梯度的求解方法。
求解网格节点的梯度需要利用该节点周围其它多个点进行求解,常用的方法有Hom梯度算子、Barron梯度算子等,此处选择精度较高的Barron算子。Barron算子是对邻域离散折射率进行沿x、y、z方向的三次样条插值结果,如下图所示。
对于某点n(i,j,k)邻域四点的折射率沿x、y、z方向运用Barron算子进行插值,得到梯度值表达式为:
3.光线追迹方案
本方案采用泰勒级数展开法进行光线追迹。
在初始点r0的一个邻近区域内将位置矢量r展开成弧长s的Taylor级数:
其中,∆s 是所选的邻近区域半径,也即是追迹步长。dr/ds 表示光线的切向单位矢量,用 τ 表示;d2r/ds2 表示光线的曲率矢量(法向矢量),用 k 表示。
则有:k·s = 0。 再把 dr/ds 做4类似展开,得到:
用τ,k符号科表示为:
光线方程可写成:
即:
结合上几式可得:
最后给出具有二阶精度的泰勒级数展开数值计算方法公式:
在介质空间内的某一位置,求得折射率值n和折射率梯度分布 ∇n,再由初始光线的起始点r及该点处的光线方向 τ(即 dr/ds),可以求得k;最后通过上式求得邻近点的 r(位置)和 τ(光线轨迹方向),再计算得到该点的折射率 n 和梯度 ∇n。依次类推,按照小步长∆s,可以相继求得(r1,τ1 ),(r2,τ2 ),…,直到成像面上的点(rn,τn ),完成光线追迹。