Hauptinhalt

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

rotmat

Konvertieren Sie Quaternion in Rotationsmatrix

Beschreibung

rotationMatrix = rotmat(quat,rotationType) konvertiert den Quaternion quat in eine äquivalente Rotationsmatrixdarstellung.

Beispiel

Beispiele

alle reduzieren

Definieren Sie einen Quaternion zur Verwendung bei der Punktrotation.

theta = 45;
gamma = 30;
quat = quaternion([0,theta,gamma],"eulerd","ZYX","point")
quat = quaternion
       0.8924 +  0.23912i +  0.36964j + 0.099046k

Konvertieren Sie den Quaternion in eine Rotationsmatrix.

rotationMatrix = rotmat(quat,"point")
rotationMatrix = 3×3

    0.7071   -0.0000    0.7071
    0.3536    0.8660   -0.3536
   -0.6124    0.5000    0.6124

Um die Rotationsmatrix zu überprüfen, erstellen Sie direkt zwei Rotationsmatrizen, die den Rotationen um die y- und x-Achsen entsprechen. Multiplizieren Sie die Rotationsmatrizen und vergleichen Sie sie mit der Ausgabe von rotmat.

theta = 45;
gamma = 30;

ry = [cosd(theta)   0           sind(theta) ; ...
      0             1           0           ; ...
     -sind(theta)   0           cosd(theta)];
 
rx = [1             0           0           ;      ...
      0             cosd(gamma) -sind(gamma) ;     ...
      0             sind(gamma) cosd(gamma)];

rotationMatrixVerification = rx*ry
rotationMatrixVerification = 3×3

    0.7071         0    0.7071
    0.3536    0.8660   -0.3536
   -0.6124    0.5000    0.6124

Definieren Sie einen Quaternion zur Verwendung bei der Frame-Rotation.

theta = 45;
gamma = 30;
quat = quaternion([0,theta,gamma],"eulerd","ZYX","frame")
quat = quaternion
       0.8924 +  0.23912i +  0.36964j - 0.099046k

Konvertieren Sie den Quaternion in eine Rotationsmatrix.

rotationMatrix = rotmat(quat,"frame")
rotationMatrix = 3×3

    0.7071   -0.0000   -0.7071
    0.3536    0.8660    0.3536
    0.6124   -0.5000    0.6124

Um die Rotationsmatrix zu überprüfen, erstellen Sie direkt zwei Rotationsmatrizen, die den Rotationen um die y- und x-Achsen entsprechen. Multiplizieren Sie die Rotationsmatrizen und vergleichen Sie sie mit der Ausgabe von rotmat.

theta = 45;
gamma = 30;

ry = [cosd(theta)   0           -sind(theta) ; ...
      0             1           0           ; ...
     sind(theta)   0           cosd(theta)];
 
rx = [1             0           0           ;      ...
      0             cosd(gamma) sind(gamma) ;     ...
      0             -sind(gamma) cosd(gamma)];

rotationMatrixVerification = rx*ry
rotationMatrixVerification = 3×3

    0.7071         0   -0.7071
    0.3536    0.8660    0.3536
    0.6124   -0.5000    0.6124

Erstellen Sie einen 3x1-normalisierten Quaternionenvektor.

qVec = normalize(quaternion(randn(3,4)));

Konvertieren Sie das Quaternionen-Array in Rotationsmatrizen. Die Seiten von rotmatArray entsprechen dem linearen Index von qVec.

rotmatArray = rotmat(qVec,"frame");

Angenommen, qVec und rotmatArray entsprechen einer Rotationsfolge. Kombinieren Sie die Quaternionenrotationen in einer einzigen Darstellung und wenden Sie die Quaternionenrotation dann auf beliebig initialisierte kartesische Punkte an.

loc = normalize(randn(1,3));
quat = prod(qVec);
rotateframe(quat,loc)
ans = 1×3

    0.9524    0.5297    0.9013

Kombinieren Sie die Rotationsmatrizen zu einer einzigen Darstellung und wenden Sie die Rotationsmatrix dann auf dieselben anfänglichen kartesischen Punkte an. Überprüfen Sie, ob das Ergebnis der Quaternionenrotation und der Rotationsmatrix die gleiche Ausrichtung aufweist.

totalRotMat = eye(3);
for i = 1:size(rotmatArray,3)
    totalRotMat = rotmatArray(:,:,i)*totalRotMat;
end
totalRotMat*loc'
ans = 3×1

    0.9524
    0.5297
    0.9013

Eingabeargumente

alle reduzieren

Zu konvertierender Quaternion, angegeben als quaternion-Objekt oder Array von quaternion-Objekten beliebiger Dimensionalität.

Rotationstyp, dargestellt durch die rotationMatrix-Ausgabe, angegeben als "frame" oder "point".

Datentypen: char | string

Ausgabeargumente

alle reduzieren

Darstellung der Rotationsmatrix, zurückgegeben als 3x3-Zahlenmatrix oder 3-mal-3mal-N-Zahlenarray.

  • Wenn quat ein Skalar ist, wird rotationMatrix als 3x3-Matrix zurückgegeben.

  • Wenn quat nicht skalar ist, wird rotationMatrix als 3-mal-3mal-N-Array zurückgegeben, wobei rotationMatrix(:,:,i) die Rotationsmatrix ist, die quat(i) entspricht.

Der Datentyp der Rotationsmatrix ist derselbe wie der zugrunde liegende Datentyp von quat.

Datentypen: single | double

Algorithmen

Gegeben sei ein Quaternion der Form

q=a+bi+cj+dk,

Die äquivalente Rotationsmatrix für die Frame-Rotation ist definiert als

[2a21+2b22bc+2ad2bd2ac2bc2ad2a21+2c22cd+2ab2bd+2ac2cd2ab2a21+2d2].

Die äquivalente Rotationsmatrix für die Punktrotation ist die Transponierte der Frame-Rotationsmatrix:

[2a21+2b22bc2ad2bd+2ac2bc+2ad2a21+2c22cd2ab2bd2ac2cd+2ab2a21+2d2].

Referenzen

[1] Kuipers, Jack B. Quaternions and Rotation Sequences: A Primer with Applications to Orbits, Aerospace, and Virtual Reality. Princeton, NJ: Princeton University Press, 2007.

Erweiterte Fähigkeiten

alle erweitern

C/C++ Codegenerierung
Generieren Sie C und C++ Code mit MATLAB® Coder™.

Versionsverlauf

Eingeführt in R2019b