我正在尝试检查顶点是否在三角形内,但我在为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) );
}发布于 2011-01-11 22:32:18
如果你想知道顶点是否直接位于三角形的平面和边界内(即,在三角形的表面上),你可以分别检查这两件事。首先检查顶点是否位于三角形的平面内。然后,您应该能够将三角形和顶点投影到2D中,并使用2D方法。
它还具有消除大量顶点的优点,因为它们不在三角形的平面上,这是一种快速计算。
发布于 2011-01-11 22:04:26
如果该点在三角形的平面上,则可以使用here所述的重心方法。
发布于 2011-01-12 09:02:11
要检查该点是否在三角形的平面上,可以编写三角形的平面方程。用3个点来写很简单,而且它是线性的,所以计算会非常快。
要理解如何编写公式检查http://en.wikipedia.org/wiki/Plane_(geometry,它很简单。
要确定该点是否在平面内,只需简单地检查它是否满足普朗斯方程,就足以保证精度
https://stackoverflow.com/questions/4657864
复制相似问题