Ich versuche, ein Array von 3D-Punkten und einer Ebene und teilen Sie die Punkte in 2 Arrays basierend auf welcher Seite der Ebene sind sie auf. Bevor ich mich intensiv dem Debugging widme, wollte ich posten, was ich vorhabe, um sicherzustellen, dass mein Verständnis davon funktioniert. GrundsätzlichÜberprüfen Sie, welche Seite einer Ebene Punkte sind auf
Ich habe das Flugzeug mit 3 Punkten und I verwenden (Pseudocode):
var v1 = new vector(plane.b.x-plane.a.x, plane.b.y-plane.a.y, plane.b.z-plane.a.z);
var v2 = new vector(plane.c.x-plane.a.x, plane.c.y-plane.a.y, plane.c.z-plane.a.z);
Ich nehme das Kreuzprodukt der beiden Vektoren, die den Normalvektor zu erhalten.
Dann Schleife ich durch meine Anordnung von Punkten und verwandeln Sie sie in Vektoren und berechnen Sie das Skalarprodukt gegen die Normale.
Dann verwende ich das Punktprodukt, um die Seite zu bestimmen, auf der sich der Punkt befindet.
Hört sich das so an, als würde es funktionieren?
Es klingt, als würde es funktionieren. Ich möchte jedoch auch darauf hinweisen, dass Sie das "Vektorisieren" aus der inneren Schleife herausnehmen können, indem Sie den Punkt "plane.a" mit dem normalen Vektor multiplizieren, um einen konstanten Offset zu erhalten. Dies eliminiert 2 Subtraktionen und ist im Wesentlichen die gleiche wie @ Alis Lösung: sein 'd' ist' - dot (plane_normal, plane.a) ' – comingstorm