Barycentric Coordinates of Tetrahedron (计算四面体的重心坐标)

四面体应该是说空间体状结构的最简单形式,只需要四个顶点就可以构成,某些情况下可能需要用四面体来做一些插值之类的操作,或是碰撞检测(比如判断一个点是否在四面体的内部),这些都可以用其重心坐标来成(Barycentric Coordinates)。四面体的重心坐标跟三角形的重心坐标类似,都是找到组成四面体的几个顶点与目标点之间的权重关系,进而来描述该目标点。一般情况下,三角形重心坐标的计算方法是使用对应的子三角形与原始三角形的面积比值来计算;同样,扩展到空间中的四面体的重心坐标就可以用对应的子四面体的体积比值来计算。不过这种方法稍显复杂,最近看到了一种更加简便的方法(但也跟体积比值法类似),使用点到平面的距离比值方法来计算。

Barycentric Coordinates of Tetrahedron (计算四面体的重心坐标)_第1张图片
首先定义点到平面的有向距离为:D(p , PLabc),其中p、a、b、c均为空间上的点,而PL是由a、b、c三个点所构成的平面,那么对于上图分布的一个四面体以及另外的任意一个点P,可得该点的重心坐标为:
Barycentric Coordinates of Tetrahedron (计算四面体的重心坐标)_第2张图片

其中的分别是P点相对于a,b,c,d点的权重,而且有+++= 1
有了重心坐标之后就可以使用其来判断P点与该四面体间的关系:

  • 如果均属于[0,1],那么P点位于该四面体的内部。
  • 如果其中某一项不在此范围内,还可以根据其越域方式来判断P点在四面体外的分布情况:比如小于0,那么P点就处于bcd所对应的平面之下(此处用a点来参考平面的上下);反之,若其大小1,那么P点就处于过P点且平行于bcd平面的平面之上。

这种计算方法还是很有用的,一方面用处较多,另一方面效率不大,点到平面的距离只需做dot就够了。

你可能感兴趣的:(c,扩展)