Main Content

rotmat

Convertir cuaternión en matriz de rotación

Descripción

ejemplo

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

Ejemplos

contraer todo

Defina un cuaternión para su uso 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 - y -.yx Multiplique las matrices de rotación y compárelas 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 su uso en la rotación del marco.

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 - y -.yx Multiplique las matrices de rotación y compárelas 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 3 por 1.

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

Convierta la matriz quaternion en matrices de rotación. Las páginas de corresponden al índice lineal de .rotmatArrayqVec

rotmatArray = rotmat(qVec,'frame');

Supongamos y corresponde a una secuencia de rotaciones.qVecrotmatArray Combine las rotaciones de cuaternión en una sola representación y, a continuación, aplique la rotación del cuaternión a los 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 y, a continuación, aplique la matriz de rotación a los mismos puntos cartesianos iniciales. Verifique el resultado de la rotación y rotación del cuaternión en 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

Quaternion para convertir, especificado como una matriz escalar, vectorial, matriz o multidimensional.

Tipos de datos: quaternion

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

Tipos de datos: char | string

Argumentos de salida

contraer todo

Representación de matriz de rotación, devuelta como una matriz de 3 por 3 o una matriz multidimensional de 3 por 3 por.N

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

  • Si no es escalar, se devuelve como una matriz multidimensional de 3 por 3 por, donde está la matriz de rotación correspondiente a .quatrotationMatrixNrotationMatrix(:,:,i)quat(i)

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

Tipos de datos: single | double

Algoritmos

Dada una cuaternión de la forma

q=a+bi+cj+dk,

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

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

La matriz de rotación equivalente para la rotación de puntos es la transposición de la matriz de rotación de trama:

[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

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

Introducido en R2018a