点到平面(三角形)的最短距离

有时候,我们经常需要计算一个点P到平面上的投影(P'),简单的讲,这个投影点P'能满足|P-P'|为P到平面的最短距离。

简单介绍一下如何计算该算法

假设平面以三点式给出,三个顶点分别为p0,p1,p2

 

那么以P0为原点, v0 = P1-P0 , v1 = P2-P0.

[v0 , v1] 为该平面的一个基, 注意不是正交的。

 

所以平面上的任意一点为  Pt = P0 + t0 * v0 + t1 * v1;

 

因此对P',我们能满足 P-P' = P -  (P0 + t0 * v0 + t1 * v1);

同样,因为P-P' 垂直平面,那么 P-P' 垂直该平面上任意一个向量

 

所以

 

(P-P') * v0 = 0

(P-P') * v1 = 0

 

==>

(P -  P0 ) * v0  = t0 * v0 *v0  + t1 * v1 *v0 ;

(P -  P0 ) * v1  = t0 * v0 *v1  + t1 * v1 *v1 ;

 

解一个二元一次方程,可以得到t0 ,和 t1的值。

代入 Pt = P0 + t0 * v0 + t1 * v1 , 可以得到所求的点。

 

 

 

//延伸 

注意,如果要求点到三角形的最短距离,我们首先判断t0 , t1的范围。

如果t0,t1都在[0-1]区间内,并且t0+t1 < 1 的时候,那么P'在三角形内部。上面所求的点即为点到三角形最短距离。

当P'不在三角形内部的时候。那么请看下图。

 

 

 

 

根据几个边界条件选出一个边,计算出P'到该边的最近点,并且把得到的(t0,t1) clamp到[0-1]。得到的P''就是所求的最短距离

你可能感兴趣的:(点到平面(三角形)的最短距离)