Rotationsmatrix zwischen zwei zwei Transformationsmatrizen (XNA) erhalten

8

Ich habe momentan ein Marker-Erkennungssystem für AR, es erkennt Marker in der Szene und gibt die Transformationsmatrix der Kamera für jeden Marker in der Szene an.

Sagen wir, ich habe zwei Marker gefunden. Ich versuche, die Rotationsmatrix zu finden, die ich auf einen der Marker anwenden muss, damit er mit der Ausrichtung des anderen Markers übereinstimmt.

Ich dachte, es sollte dasselbe sein wie die Transformationsmatrix eines Markers zu einem anderen zu berechnen und die Transformation zu zerlegen, um die x, y, z euler Rotationsmatrix zu erhalten, aber ich kann das nicht zum Funktionieren bringen. Ich verwende C # mit XNA.

Im Code:

%Vor%

Das oben genannte scheint nicht zu funktionieren.

Eine andere Frage wäre, wie man die x, y, z euler Rotationen aus der Rotationsmatrix herausholt?

BEARBEITEN:

Ich habe eine Funktion gefunden, um die Quaternion nach x, y, z Ordnung in euler umzuwandeln: Ссылка

Wenn ich dies auf meinen Code anwendete, erhielt ich folgende Ergebnisse:

Die tatsächliche Drehung sollte sein: x: 0 y: 0 z: -0,52

Ich habe auch bemerkt, dass sich das y und z stark verändert hat, je nachdem wie ich die Kamera positioniert habe.

Die beiden Transformationsmatrizen, die ich vom Markierungsdetektor erhalte, enthalten die Orientierung und Translation der Kamera relativ zu einer der Markierungen, wie hier erklärt: Ссылка Ich habe sie in XNA-Format umgewandelt und ich weiß, dass sie korrekt funktionieren, da ich die Ecken auf den Bildschirm zeichnen kann und es mit dem übereinstimmt, was die Kamera sieht.

    
Jkh2 03.06.2012, 16:00
quelle

1 Antwort

7

Die Lösung, die ich am meisten mag, ist die Verwendung von Quaternionen. Wenn Sie eine Ausrichtung haben, die mit q1 beschrieben wird, und eine andere mit q2 , können Sie mit

von einer Ausrichtung zur anderen gelangen
  

q1 = q * q2

ist q die Rotation, nach der Sie suchen.

  

q = q1 * (q2) ^ - 1; q = q1 · konj (q2);

Sie müssen nur von Rotation in Quaternion und quaternion to rotation .

Stellen Sie nur sicher, dass Sie Quaternionen normalisieren, damit die Äquivalenzen wahr sind. In den Seiten, die ich verlinkt habe, hast du alle notwendigen Formeln, Erklärungen, sogar Code in Java, C ++. Wirklich wert, zu den Favoriten hinzuzufügen.

    
Jav_Rock 04.06.2012 10:48
quelle