我试图确定一个特定点是否位于多面体内。在我目前的实现中,我正在研究的方法是我们正在寻找多面体的面数组(在这种情况下是三角形,但以后可能是其他多边形)。我一直在尝试从这里找到的信息中工作:http: //softsurfer.com/Archive/algorithm_0111/algorithm_0111.htm
下面,您将看到我的“内部”方法。我知道 nrml/normal 有点奇怪.. 这是旧代码的结果。当我运行它时,无论我给它什么输入,它似乎总是返回 true。(这已经解决了,请看我下面的答案——这段代码现在可以工作了)。
bool Container::inside(Point* point, float* polyhedron[3], int faces) {
Vector* dS = Vector::fromPoints(point->X, point->Y, point->Z,
100, 100, 100);
int T_e = 0;
int T_l = 1;
for (int i = 0; i < faces; i++) {
float* polygon = polyhedron[i];
float* nrml = normal(&polygon[0], &polygon[1], &polygon[2]);
Vector* normal = new Vector(nrml[0], nrml[1], nrml[2]);
delete nrml;
float N = -((point->X-polygon[0][0])*normal->X +
(point->Y-polygon[0][1])*normal->Y +
(point->Z-polygon[0][2])*normal->Z);
float D = dS->dot(*normal);
if (D == 0) {
if (N < 0) {
return false;
}
continue;
}
float t = N/D;
if (D < 0) {
T_e = (t > T_e) ? t : T_e;
if (T_e > T_l) {
return false;
}
} else {
T_l = (t < T_l) ? t : T_l;
if (T_l < T_e) {
return false;
}
}
}
return true;
}
这是在 C++ 中,但正如评论中所提到的,它真的与语言无关。