我正在尝试检查顶点是否在三角形内部,但是我在为3D环境开发CCW功能时遇到了问题。
对于2D环境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) );
}
答案 0 :(得分:1)
如果你想知道顶点是直接位于三角形的平面内还是位于三角形的边界内(即在三角形的表面上),你可以单独检查这两个东西。首先检查顶点是否位于三角形的平面中。然后你应该能够将三角形和顶点投影到2D并使用你的2D方法。
它还具有消除大量顶点的好处,因为它们不在三角形平面上,这是一个快速计算。
答案 1 :(得分:0)
如果该点位于三角形的平面上,您可以使用描述为here的重心方法。
答案 2 :(得分:0)
要检查点是否在三角形的平面上,您可以编写三角形的平面方程。使用3个点写入很简单,它是线性的,因此计算速度非常快。
要了解如何编写等式检查http://en.wikipedia.org/wiki/Plane_(geometry),这很简单。
要确定点是否在平面中,请简单检查它是否满足普通方程式,足以保证准确性