//判断一个点是否处于三角形的所在的空间三菱柱里
//已知空间中一点,以及三角形的三个顶点,三角形所处平面的法向
//返回整形数值,1:三菱柱内
// -1:三菱柱外
int PointIOTriangle(Point point, Point point1, Point point2, Point point3, CVector3d normal)
{
//三角形的三条边组成的向量
CVector3d vec1 = FormVector(point1, point3);
CVector3d vec2 = FormVector(point2, point1);
CVector3d vec3 = FormVector(point3, point2);
//三角形的三条边在三角形所在平面内的三个法向
CVector3d nor1 = vec1.Cross(normal);
CVector3d nor2 = vec2.Cross(normal);
CVector3d nor3 = vec3.Cross(normal);
//三角形的三个顶点与空间中的任意点形成的三个向量
vec1 = FormVector(point1, point);
vec2 = FormVector(point2, point);
vec3 = FormVector(point3, point);
//三角形三条边上的法向分别与上述所求的三个向量的点积
double dot1 = nor1.Dot(vec1);
double dot2 = nor2.Dot(vec2);
double dot3 = nor3.Dot(vec3);
if (dot1 > .0 || dot2 > .0 || dot3 > .0)//点在三菱柱外
{
return -1;
}
else
{
return 1;//点在三菱柱内
}
}
