2012-06-01 10 views
6

Ich schaue auf die Kernbewegungsklasse CMAttitude, es kann die Ausrichtung des Geräts als 3x3 Rotationsmatrix ausdrücken. Zur gleichen Zeit habe ich einen Blick auf die CATransform3D, die die Haltung der Ansicht kapselt, sowie Skalierung. Die CATransform3D ist eine 4x4-Matrix.Sind CMAttitude und CATransform3D durch Rotationsmatrizen verbunden?

Ich habe gesehen, dass die OpenGL Rotationsmatrix 4x4 ist und einfach 0001 in der 4. Zeile und Spalte aufgefüllt ist.

Ich bin verrückt, wenn die Rotationsmatrix der CMAttitude mit CATransforms Matrix verwandt ist?

Kann ich die Drehung des Geräts im Raum, die über eine Rotationsmatrix erhalten wird, verwenden, um eine UIView mit CATransform3D zu transformieren? Meine Absicht ist es, den Benutzer das Telefon bewegen und die gleiche Transformation auf eine UIView auf dem Bildschirm anwenden.

Bonus Frage: Wenn sie verwandt sind, wie transformiere ich eine Rotationsmatrix von CMAtitude in CATransform3D?

Antwort

4

Gyroskop wird verwendet, um nur die Ausrichtung des Geräts im Raum zu bestimmen. Es gibt viele Möglichkeiten, die Orientierung selbst zu parametrisieren (siehe die Informationen über SO(3) Gruppe für theoretische Informationen) - Quaternionen, Euler-Winkel und 3x3-Matrizen sind einer von ihnen.

Die "Einbettung" der 3x3-Matrix in die 4x4-Matrix ist kein GL-spezifischer Trick. Es ist ein "semi-direct product" der Gruppe von Translationen (die für alle 3D-Vektoren isomorph ist) und der Gruppe von Rotationen (das oben erwähnte SO (3)).

Um die CATransform3D-Matrix von CMAttitude zu erhalten, müssen Sie eine Position Ihres Objekts annehmen. Wenn es Null ist, dann packen Sie einfach die Matrix mit 0001, wie Sie gesagt haben.

Diese Frage könnte für Sie von Interesse sein: Apple gyroscope sample code

+0

Danke für eine große informative Antwort! –

+0

Gern geschehen :) Ich hoffe die Antwort ist nicht zu theoretisch :) –

Verwandte Themen