Ich versuche zu bestimmen, ob ein bestimmter Punkt innerhalb eines Polyeders liegt. In meiner aktuellen Implementierung nimmt die Methode, an der ich arbeite, den Punkt, den wir suchen, ein Array der Flächen des Polyeders (Dreiecke in diesem Fall, aber es könnte später andere Polygone sein). Ich habe versucht, von den Informationen hier gefunden zu arbeiten: http://softsurfer.com/Archive/algorithm_0111/algorithm_0111.htm
Unten sehen Sie meine "innere" Methode. Ich weiß, dass die nrml/normal Sache ist irgendwie seltsam .. es ist das Ergebnis der alten Code. Als ich diesen Code ausführte, schien er immer true zurückzugeben, egal, welche Eingabe ich ihm gebe. (Dies ist gelöst, siehe meine Antwort unten - dieser Code funktioniert jetzt).
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;
}
Dies ist in C++, aber wie in den Kommentaren erwähnt, ist es wirklich sehr Sprache agnostisch.