Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

rotmat

Convertir un cuaternión en matriz de rotación

Descripción

rotationMatrix = rotmat(quat,rotationType) convierte el cuaternión, quat, en una representación de la matriz de rotación equivalente.

ejemplo

Ejemplos

contraer todo

Defina un cuaternión para usarlo en la rotación de puntos.

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

Convierta el cuaternión en una matriz de rotación.

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

Para verificar la matriz de rotación, cree directamente dos matrices de rotación correspondientes a las rotaciones sobre los ejes x e y. Multiplique las matrices de rotación y compare con la salida de 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

Defina un cuaternión para usar en la rotación de marcos.

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

Convierta el cuaternión en una matriz de rotación.

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

Para verificar la matriz de rotación, cree directamente dos matrices de rotación correspondientes a las rotaciones sobre los ejes x e y. Multiplique las matrices de rotación y compare con la salida de 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

Cree un vector de cuaternión normalizado de 3 por 1.

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

Convierta el arreglo de cuaterniones en matrices de rotación. Las páginas de rotmatArray corresponden al índice lineal de qVec.

rotmatArray = rotmat(qVec,"frame");

Suponga que qVec y rotmatArray corresponden a una secuencia de rotaciones. Combine las rotaciones de cuaterniones en una sola representación, luego aplique la rotación de cuaterniones a puntos cartesianos inicializados arbitrariamente.

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

    0.9524    0.5297    0.9013

Combine las matrices de rotación en una sola representación, luego aplique la matriz de rotación a los mismos puntos cartesianos iniciales. Verifique que la rotación del cuaternión y la matriz de rotación den como resultado la misma orientación.

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

Argumentos de entrada

contraer todo

Cuaternión que se va a convertir, especificado como un objeto quaternion o un arreglo de objetos quaternion de cualquier dimensionalidad.

Tipo de rotación representado por la salida rotationMatrix, especificado como "frame" o "point".

Tipos de datos: char | string

Argumentos de salida

contraer todo

Representación de matriz de rotación, devuelta como una matriz numérica de 3 por 3 o un arreglo numérico de 3 por 3 por N.

  • Si quat es un escalar, rotationMatrix se devuelve como una matriz de 3 por 3.

  • Si quat es no escalar, rotationMatrix se devuelve como un arreglo de 3 por 3 por N, donde rotationMatrix(:,:,i) es la matriz de rotación correspondiente a quat(i).

El tipo de datos de la matriz de rotación es el mismo que el tipo de datos subyacentes de quat.

Tipos de datos: single | double

Algoritmos

Dado un cuaternión con el formato

q=a+bi+cj+dk,

la matriz de rotación equivalente para rotación de marcos se define como

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

La matriz de rotación equivalente para rotación de puntos es la trasposición de la matriz de rotación de marcos:

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

Referencias

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

Capacidades ampliadas

expandir todo

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2018a

Consulte también

Funciones

Objetos