点到三角形距离的数学原理:
所有的求点 p p p到三角形的距离的方式数学本质上都是一样的:
第一步:找到点在三角形所在平面的投影点 p ′ p' p′。
第二步:将 p ′ p' p′再向三角形上做一次投影得到 p ′ ′ p'' p′′:
如果 p ′ p' p′直接落在三角形内,直接令 p ′ ′ = p ′ p''=p' p′′=p′。
如果落在三角形外,再依次判断投影在哪条边上,如果投影点落在边上就计算出来 p ′ ′ p'' p′′,如果超出了边的范围,直接取顶点作为 p ′ ′ p'' p′′的计算值。
第三步:计算 p − p ′ ′ p-p'' p−p′′的长度,即为点到三角形的距离。
效率分析:
在上述计算过程,除了有很多条件判断外,在第一步,第二步,第三步都有内积(乘法)和开方需要计算,也就是说至少有三次内积和开方的运算。在条件判断无法减少的情况下,尽可能的减少乘法和开方的计算次数,成为了提高速度的关键。
快速计算方式:
第一步:通过rt矩阵将三角形放到原点,其中一条边落在x轴上,另一条边落在xy平面内。
Notes:此时,点到三角形平面的距离可以简单的通过计算 p z − p z ′ p_z-p'_z pz−pz′得到。
第二步:第二次的投影也变成了一个二维的计算过程。
第三步:与其他方法无异,计算 p − p ′ ′ p-p'' p−p′′的长度,作为点到三角形的距离。
效率分析:
与传统方法相比,快速计算方式中,第一步只用到了内积(乘法),而没用到开方。第二步计算因为转换到了二维,也降低了计算的次数。第三步与传统方法没有区别。
结果:
快速计算方法是传统方法效率的三倍以上。