Angesichts des Punktes
Vector pos = new Vector(0.0, 0.20156815648078918, -78.30000305175781, 1.0);
und die Ebene (Dreieck)
Vector a = new Vector(-6.599999904632568, 0.0, -78.5, 1.0);
Vector b = new Vector(6.599999904632568, 0.0, -78.5, 1.0);
Vector c = new Vector(6.599999904632568, 4.400000095367432, -78.5, 1.0);
Ich möchte ein Flugzeug bekommen, das normal in Richtung zeigt pos
//Getting plane normal
Vector ac = Vector.Subtract(a,c);
Vector bc = Vector.Subtract(b,c);
Vector planeNormal = Vector.CrossProduct(bc, ac);
//Testing which side of the plane the point is on
double dprod = Vector.DotProduct(planeNormal, pos);
if (dprod < 0)
{
planeNormal.Negate();
}
Aber diese Methode ist falsch. Die resultierenden planeNormal
Punkte in der negativen Z-Richtung, daher sollte es nicht negiert werden. Gibt es dafür eine bewährte Methode? Bitte hilf mir, ich versage massiv @ math :)
collision-detection
normals
Daniel Szalay
quelle
quelle
Antworten:
Ihre Methode ist größtenteils korrekt, verpasst jedoch einen Schritt. Sie können die Position des Punkts nicht einfach als Vektor verwenden, um ein Punktprodukt zu erhalten. Sie müssen einen Richtungsvektor aus einem Punkt in der Ebene erstellen. Jeder Punkt in der Ebene reicht aus (die Richtung muss nicht genau sein), verwenden Sie also einfach eine der Ecken.
quelle