我正在尝试检查顶点是否在三角形内,但是在为3D环境开发CCW功能时遇到问题。
二维环境CCW功能将是这样的

//CCW calculates the cross produt


double CCW ( point A  , point B , point C ) {

return (B.x-A.x)  * (C.y-A.y) - (B.y-A.y) * (C.x-A.x);

}

//The other part is designed to work on 3D

typedef struct{

   double x;
   double y;
   double z;

}Point;

int inTriangle(point A, point B, point C, point D){

   Point E;

   E.x = (A.x + B.x + C.x)/3;

   E.y = (A.y + B.y + C.y)/3;

   E.z = (A.z + B.z + C.z)/3;


return ( CCW(A,B,D) * CCW (A,B,E) > 0 &&
         CCW(B,C,D) * CCW(B,C,E) > 0 &&
         CCW(A,C,D) * CCW(A,C,E) );

}

最佳答案

如果您想知道顶点是否直接位于三角形的平面内以及它的边界之内(即,在三角形的表面上),则可以分别检查这两项。首先检查顶点是否位于三角形平面内。然后,您应该能够将三角形和顶点投影到2D中,并使用2D方法。

它还具有消除许多顶点的好处,因为它们不在三角形平面上,这是一种快速的计算。

07-24 14:09