Gegeben Vektor einer Achse, wie finde ich Vektoren von anderen zwei Achsen?

7

Das ist ein mathematisches Problem, ich weiß nicht genau, wie ich es machen soll. Der Vektor ist nicht auf eine Achse ausgerichtet. Wenn Sie also nur um 90 Grad um x, y oder z drehen, erhalten Sie nicht unbedingt die anderen Achsen.

    
Stoff81 15.06.2010, 22:24
quelle

4 Antworten

16

Ich kann mir ein paar verschiedene Szenarien vorstellen, nach denen Sie fragen könnten.

Gegeben: Ein bereits vorhandenes Koordinatensystem

  • In einem 2D-System sind Ihre Achsen / Basis immer [1,0] und [0,1] - x und y Achsen.

  • In einem 3D-System sind Ihre Achsen / Basis immer [1,0,0] , [0,1,0] und [0,0,1] - x , y und z .

Gegeben: Eine Achse in einem beliebigen 2D-Koordinatensystem

Wenn Sie eine Achse in einem beliebigen 2D-Koordinatensystem haben, ist die andere Achse der orthogonale Vektor.

Um einen Vektor orthogonal zu drehen gegen den Uhrzeigersinn :

%Vor%

Um einen Vektor orthogonal zu drehen im Uhrzeigersinn :

%Vor%

Zusammenfassend:

%Vor%

Gegeben: Zwei Achsen in einem beliebigen 3D-Koordinatensystem

Suchen Sie dazu das Cross-Produkt.

%Vor%

Nach diesen drei Richtlinien:

  • ( x Achse) x ( y Achse) = ( z Achse)
  • ( y Achse) x ( z Achse) = ( x Achse)
  • ( z Achse) x ( x Achse) = ( y Achse)

Gegeben: Eine Achse in einem beliebigen 3D-Koordinatensystem

Es gibt nicht genügend Informationen, um die eindeutige Lösung dieses Problems zu finden. Wenn Sie sich den zweiten Fall ansehen (Eine Achse in einem beliebigen 2D-Koordinatensystem), müssen Sie zuerst einen orthogonalen Vektor finden. Es gibt jedoch unendlich viele mögliche orthogonale Vektoren zu einer einzelnen Achse im 3D-Raum!

Sie können jedoch eine der möglichen Lösungen finden.

Eine Möglichkeit, einen beliebigen dieser orthogonalen Vektoren zu finden, indem ein beliebiger Vektor gefunden wird [d,e,f] wobei:

%Vor%

Wenn Ihre ursprüngliche Achse beispielsweise [2,3,4] ist, lösen Sie Folgendes:

%Vor%

Das heißt, jeder Wert von [d,e,f] , der dies erfüllt, ist ein befriedigender orthogonaler Vektor (solange es nicht [0,0,0] ist). Man könnte zum Beispiel [3,-2,0] :

wählen %Vor%

Wie Sie sehen, ist eine "Formel", die funktioniert, [d,e,f] = [b,-a,0] ... aber es gibt viele andere, die auch funktionieren können; Es gibt tatsächlich ein Unendliches!

Sobald Sie Ihre beiden Achsen [a,b,c] und [d,e,f] gefunden haben, können Sie diese auf den vorherigen Fall (Fall 3) reduzieren, indem Sie [a,b,c] und [d,e,f] als Ihre x- und y-Achsen (oder welche Achsen Sie verwenden) verwenden brauche sie für dein spezifisches Problem).

Normalisierung

Beachten Sie, dass Ihre Vektoren immer größer und größer werden, wenn Sie fortlaufend Punktprodukte und Produkte kreuzen. Je nachdem, was Sie wollen, ist dies möglicherweise nicht erwünscht. Zum Beispiel möchten Sie vielleicht, dass Ihre Basisvektoren (Ihre Koordinatenachsen) alle die gleiche Größe / Länge haben.

Um jeden Vektor (außer für [0,0,0] ) in einen Einheitsvektor zu verwandeln (ein Vektor mit einer Länge von 1, in der gleichen Richtung wie der ursprüngliche Vektor):

%Vor%

Dabei steht r' für den Einheitsvektor von r - ein Vektor mit der Länge 1, der in die gleiche Richtung zeigt wie r . Ein Beispiel:

%Vor%

Wenn ich nun zum Beispiel einen Vektor in der gleichen Richtung von r mit einer Länge von 5 wollte, würde ich einfach r' * 5 multiplizieren, was [a' * 5, b' * 5, c' * 5] ist.

    
Justin L. 15.06.2010, 23:04
quelle
3

Es ist nicht genug, nur eine Achse zu haben, da immer noch unendlich viele Achsen in der senkrechten Ebene liegen können.

Wenn Sie es jedoch schaffen, eine andere Achse zu bekommen, können Sie das Kreuzprodukt verwenden, um das dritte zu finden.

    
Ignacio Vazquez-Abrams 15.06.2010 22:29
quelle
1

Wenn Sie einen Vektor (x, y, z) haben, können Sie einen senkrechten Vektor als (y, -x, 0) erhalten (Punktprodukt ist x yy x + 0 * z = 0)

Dann nehmen Sie das Kreuzprodukt von beiden, um den verbleibenden senkrechten Vektor zu erhalten: (x, y, z) × (y, -x, 0) = (0y + zx, ​​yz-0x, -x²-y²) = (zx, yz, -x²-y²)

    
Ozan 16.06.2010 01:17
quelle
0

Sprechen Sie von einem typischen 3-Koordinaten-System, wie es in einer 3D-Engine verwendet wird?

Mit nur einem Vektor können Sie die anderen zwei nicht finden, die einzige Information, dass Sie die Ebene haben werden, auf der sie liegen. Aber sie können in jedem Winkel sein, auch wenn sie senkrecht zu dem einzigen Vektor Sie sind haben.

    
Jack 15.06.2010 22:28
quelle

Tags und Links