`
javahigh1
  • 浏览: 1276442 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

有时候,我们经常需要计算一个点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''就是所求的最短距离

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics