我正在尝试检查顶点是否在三角形内,但是在为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方法。
它还具有消除许多顶点的好处,因为它们不在三角形平面上,这是一种快速的计算。