Von wikipedia:Berechnen eines Kreuzprodukts 2D Vektor
das Kreuzprodukt ist eine binäre Operation auf zwei Vektoren in einem dreidimensionalen euklidischen Raum, der in einem anderen Vektor ergibt, die senkrecht zur Ebene ist, welche die zwei Eingabevektoren.
Da die Definition nur in drei (or seven, one and zero) Abmessungen definiert ist, wie kann man das Kreuzprodukt von zwei 2D-Vektoren berechnen?
Ich habe zwei Implementierungen gesehen. Einer gibt einen neuen Vektor zurück (akzeptiert aber nur einen einzelnen Vektor), der andere gibt einen Skalar zurück (ist aber eine Berechnung zwischen zwei Vektoren).
Implementation 1 (gibt einen Skalar):
float CrossProduct(const Vector2D & v1, const Vector2D & v2) const
{
return (v1.X*v2.Y) - (v1.Y*v2.X);
}
Implementation 2 (gibt einen Vektor):
Vector2D CrossProduct(const Vector2D & v) const
{
return Vector2D(v.Y, -v.X);
}
Warum die unterschiedlichen Implementierungen? Wofür würde ich die skalare Implementierung verwenden? Wofür würde ich die Vektorimplementierung verwenden?
Der Grund, warum ich frage, ist, weil ich selbst eine Vector2D-Klasse schreibe und nicht weiß, welche Methode ich benutzen soll.
Implementierung 2 ist falsch. Sie benötigen zwei Vektoren, um ein Kreuzprodukt zu bilden. – bobobobo
Implementierung 2 dreht den angegebenen Vektor _v_ um -90 Grad. Substituieren -90 in & ldquor; x "= x cos & thgr; - y sin & thgr; 'und & ldquor; y" = x sin & thgr; + y cos & thgr; Eine andere Variante dieser Implementierung wäre, Vector2D (-v.Y, v.X); 'um _90 um +90 Grad zu drehen. – legends2k
@ legends2k: Es ist erwähnenswert, dass Implementierung 2 eine Erweiterung von [die Determinante zur Bewertung des Kreuzprodukts] verwendet (https: //en.wikipedia.org/wiki/Cross_product # Matrix_notation): Entferne einfach die letzte Zeile und Spalte. Eine solche Erweiterung hat immer 'N-1'-Operanden für' N'-Dimensionen. –