特定の点が多面体の内部にあるかどうかを判断しようとしています。私の現在の実装では、私が取り組んでいる方法は、多面体 (この場合は三角形ですが、後で他の多角形になる可能性があります) の面の配列を探しているポイントを取ります。ここにある情報から作業を試みています: 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++ ですが、コメントで述べたように、言語に依存しません。