Lösung eines quadratischen Gleichungssystems

Hallo,

ich bin dabei mit Quaternionen Drehungen zu berechnen, möchte aber nicht aus Vektor und Rotationsquaternion einen neuen Vektor sondern aus altem(x,y,z) und neuen Vektor(x1,y1,z1) das dazugehörige Quaternion berechnen. (Für die, die die praktische Seite des Problems interessiert habe ich ganz am Ende was geschrieben)Dabei bin ich irgendwann auf ein quadratisches Gleichungssystem gestoßen welches ich nicht lösen kann. Ich hoffe, jemand anderes kann mir einen Tip geben, denn eigentlich muss es genau eine Lösung geben:

x1=(a^2+b^2-c^2-d^2)*x+ (2*(b*c-a*d))*y +(2*(a*c-b*d))*z
y1= (2*(a*d+b*c))*x+ (a^2-b^2+c^2-d^2)*y+(2*(c*d-a*b))*z
z1= (2*(b*d-a*c))*x+ (2*(a*b+c*d))*y +(a^2-b^2-c^2+d^2)*z
Zusätzliche Bedingungen:
* b^2+c^2+d^2=1 (b,c,d ist der Vektor der Rotationsachse, ein Einheitsvektor)
* -1

Hallo Martin,

interessantes Problem. Leider bin ich nicht der fitteste in quadratischen Gleichungssystemen, aber mich würde interessieren, aus welchem Grund Quaternionen ins Spiel kommen.

Sind die nur Folge deiner speziellen Rechenmethode oder geht es nicht ohne?

Ich nehme an, a,b,c,d sind die Komponenten des Quaternions. In welchem Bezug steht dieses zur relativen Orientierung der beiden Koordnatensysteme?

Viele Grüße

Oliver

Hallo Oliver,

Quaternionen kommen ins Spiel weil die erstens die Berechnungen für den Computer weniger Aufwendig machen (Dies ist nur eine von den Rechenschritten die im 10Hz Takt ausgeführt werden müssen und die Satellitenrechner sind sehr konservativ)

Ich nehme an, a,b,c,d sind die Komponenten des Quaternions. In
welchem Bezug steht dieses zur relativen Orientierung der
beiden Koordnatensysteme?

Aus dem Quaternion abcd bestimme ich eine Art Rotationsmatrix, im Prinzip also das oben erwähnte Gleichungssystem. Multipliziert man den vektor xyz mit dem Gleichunssystem (ohne die „+“) so erhält man den neuen Vektor.

Gruß,

Martin

Auch hallo.

Hallo,

ich bin dabei mit Quaternionen Drehungen zu berechnen, möchte
aber nicht aus Vektor und Rotationsquaternion einen neuen
Vektor sondern aus altem(x,y,z) und neuen Vektor(x1,y1,z1) das
dazugehörige Quaternion berechnen. (Für die, die die
praktische Seite des Problems interessiert habe ich ganz am
Ende was geschrieben)Dabei bin ich irgendwann auf ein
quadratisches Gleichungssystem gestoßen welches ich nicht
lösen kann. Ich hoffe, jemand anderes kann mir einen Tip
geben, denn eigentlich muss es genau eine Lösung geben:

x1=(a^2+b^2-c^2-d^2)*x+ (2*(b*c-a*d))*y
+(2*(a*c-b*d))*z
y1= (2*(a*d+b*c))*x+
(a^2-b^2+c^2-d^2)*y+(2*(c*d-a*b))*z
z1= (2*(b*d-a*c))*x+ (2*(a*b+c*d))*y
+(a^2-b^2-c^2+d^2)*z
Zusätzliche Bedingungen:
* b^2+c^2+d^2=1 (b,c,d ist der Vektor der Rotationsachse, ein
Einheitsvektor)
* -1

Hallo Martin,

mir schwant so langsam, was es mit deinen Quaternionen auf sich hat: die sind wie mir scheint, nichts anderes als die reellen Komponenten eines (komplexwertigen) 2-dimensionalen Rotationsoperators in Spinordarstellung. Die gehören zum grundlegenden Handwerkszeug in der Quantenmechanik.

Warte bis heute abend, dann bin ich zu Hause und kann dir Formel aus einem einführenden QM-Buch anpinseln. Auswendig kirege ich das nicht fehlerfrei hin, denke ich.

Bis dann

Oliver

Ich sehe gerade, das 160 Seiten dicke Traktat von Markus Lahr hat ja hinten den gesuchten Formelapparat drin. Na also.

Mir war bislang noch nie klar, daß die Quaternionen in der Computergrafik eine Rolle spielen…

Oliver

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Markus und Oliver,

es freut mich, dass mein Problem auf Interesse stößt aber irgendwie bin ich noch immer nicht weiter. Die genannten Quellen kenne ich schon, ich habe sie sogar zum Teil selbst benutzt. Die Lösung meines Problems wird dort aber nirgendwo beschrieben, in der Computergrafik tritt es meines Wissens nach ja auch garnicht auf.

In den Quellen steht:
P1 = q x P0 x q*
Mit dem Rotationsquaternion q und dessen Konjugiertem q* (Da q ein Einheitsquaternion ist ist das Konjugierte gleich dem Inversen)wird der Punkt P0 gedreht und es ensteht P1. Hier kommt dann das anfangs erwähnte Gleichungssystem ins Spiel, es ist eigentlich die Matrize (aus den Elementen von q erstellt) mit der P0 multipliziert werden muss um P1 zu erhalten.

Mein Problem ist aber folgendes:
Ich habe P0 und P1 (zwei Sonnenvektoren) und möchte wissen, wie die beiden Koordinatensysteme in denen P0 und P1 dargestellt werden zueinander verdreht sind. (Es wird ausgenutzt, dass es nur eine Sonne gibt und man deswegen weiß, dass beide Vektoren in dieselbe Richtung zeigen. Demzufolge muss die Verdrehung beider Koordinatensysteme zueinander aus diesen Vektoren zu bestimmen sein.)

Gruß,
Martin

Andere Herangehensweise / neues Gleichungssystem
Hallo,

ich habe mit der Aufgabe auf einem anderen Weg weitergemacht und habe nun einen anderen Lösungsweg und ein anderes Gleichungssystem:

Ausgangsformel:
q*P*q´=P1

Das Drehquaternion q sieht so aus:
q=[cos(Phi/2), (qx,qy,qz)] = [sq,(b,c,d)]
q´= [cos(Phi/2), (-qx,-qy,-qz)] = [sq, (-b,-c,-d)
wurzel(b^2+c^2+d^2)=1
P=(x,y,z)= [0,(x,y,z)] (Quaternionenschreibweise)

Quaternionen multipliziert man so:
q·q0 = s ·s0−v ·v0,v×v0+s ·v0+s0 ·v

Zuerst berechne ich a=q·P
sa=sq·0-(b,c,d)·(x,y,z)
a = (qx,qy,qz)x(x,y,z)+sq·(x,y,z)
(· steht für Skalar, x für Vektorprodukt)

Ich will die einzelnen Faktoren nicht aufschreiben, wie man ein Vektorprodukt berechnet ist ja nicht wirklich schwierig.

Nun kann ich a mit q´ multiplizieren und so den neuen Punkt finden:
sP1=sa·sq - a·(-b,-c,-d)
P1 = a x(-b,-c,-d)+sa·(-b,-c,-d)
P1 ist nun der rotierte Punkt, sP1 sollte 0 sein.

In Matlab sieht das ganze so aus:
%Rotationsachse
x0=0
y0=0
z0=-1
Betrag = sqrt(x0^2+y0^2+z0^2)
x0=x0/Betrag
y0=y0/Betrag
z0=z0/Betrag
%Rotationswinkel
alpha = 60
%Vektor
sP = 0
P = [0 2 6]
%Rotationsquaternion
sq = cos(alpha*pi/360)
q = [sin(alpha*pi/360)*x0 sin(alpha*pi/360)*y0 sin(alpha*pi/360)*z0]
%inverses Rotationsquaternion
sqi = cos(alpha*pi/360)
qi = [-sin(alpha*pi/360)*x0 -sin(alpha*pi/360)*y0 -sin(alpha*pi/360)*z0]
% a=q*P
sa = -dot(q,P)
a = cross(q,P)+sq*P+sP*q
% P1=a*q*
sP1 = sa*sqi - dot(a,(qi))
P1 = cross(a,(qi)) + sa*(qi) + sqi*(a)

Wie komme ich nun aber an q heran wenn ich nur P und P1 habe. Die Zuordnung ist eindeutig, mir fehlt nur der Algorithmus.

Gruß,

Martin
(Der so langsam die Nase voll hat von diesem Problem)