Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

rotar marco

Rotación del marco del cuaternión

Desde R2019b

Descripción

ejemplo

rotationResult = rotateframe(quat,cartesianPoints) rota el marco de referencia de los puntos cartesianos usando el cuaternión, quat. Los elementos del cuaternión se normalizan antes de su uso en la rotación.

Frame Rotation

Ejemplos

contraer todo

Definir un punto en tres dimensiones. Las coordenadas de un punto siempre se especifican en el orden x, y y z. Para una visualización cómoda, defina el punto en el plano x-y.

x = 0.5;
y = 0.5;
z = 0;
plot(x,y,"ko")
hold on
axis([-1 1 -1 1])

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

Cree un vector de cuaternión especificando dos rotaciones separadas, una para rotar el marco 45 grados y otra para rotar el punto -90 grados alrededor del eje z. Utilice rotateframe para realizar las rotaciones.

quat = quaternion([0,0,pi/4; ...
                   0,0,-pi/2],"euler","XYZ","frame");
               
rereferencedPoint = rotateframe(quat,[x,y,z])
rereferencedPoint = 2×3

    0.7071   -0.0000         0
   -0.5000    0.5000         0

Trazar los puntos referenciados.

plot(rereferencedPoint(1,1),rereferencedPoint(1,2),"bo")
plot(rereferencedPoint(2,1),rereferencedPoint(2,2),"go")

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers

Defina dos puntos en un espacio tridimensional. Defina un cuaternión para volver a referenciar los puntos girando primero el marco de referencia alrededor del eje z 30 grados y luego alrededor del nuevo eje y 45 grados.

a = [1,0,0];
b = [0,1,0];
quat = quaternion([30,45,0],"eulerd","ZYX","point");

Utilice rotateframe para hacer referencia a ambos puntos utilizando el operador de rotación del cuaternión. Muestra el resultado.

rP = rotateframe(quat,[a;b])
rP = 2×3

    0.6124   -0.3536    0.7071
    0.5000    0.8660   -0.0000

Visualice la orientación original y la orientación rotada de los puntos. Dibuja líneas desde el origen hasta cada uno de los puntos para fines de visualización.

plot3(a(1),a(2),a(3),"bo");

hold on
grid on
axis([-1 1 -1 1 -1 1])
xlabel("x")
ylabel("y")
zlabel("z")

plot3(b(1),b(2),b(3),"ro");
plot3(rP(1,1),rP(1,2),rP(1,3),"bd")
plot3(rP(2,1),rP(2,2),rP(2,3),"rd")

plot3([0;rP(1,1)],[0;rP(1,2)],[0;rP(1,3)],"k")
plot3([0;rP(2,1)],[0;rP(2,2)],[0;rP(2,3)],"k")
plot3([0;a(1)],[0;a(2)],[0;a(3)],"k")
plot3([0;b(1)],[0;b(2)],[0;b(3)],"k")

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 8 objects of type line. One or more of the lines displays its values using only markers

Argumentos de entrada

contraer todo

Cuaternión que define la rotación, especificado como un objeto quaternion o un vector de objetos quaternion . quat y cartesianPoints deben tener tamaños compatibles:

  • length(quat) == size(cartesianPoints,1), o

  • length(quat) == 1, o

  • size(cartesianPoints,1) == 1

Puntos cartesianos tridimensionales, especificados como un vector numérico de 1 por 3 que representa un solo punto o una matriz numérica N-por 3 que representa puntos N . quat y cartesianPoints deben tener tamaños compatibles:

  • length(quat) == size(cartesianPoints,1) o

  • length(quat) == 1, o

  • size(cartesianPoints,1) == 1

Tipos de datos: single | double

Argumentos de salida

contraer todo

Puntos cartesianos definidos en referencia al marco de referencia rotado, devueltos como un vector numérico de 1 por 3 o una matriz numérica.

rotationResult es un vector de 1 por 3 cuando quat es un objeto escalar quaternion y cartesianPoints es un vector de 1 por 3 que representa un solo punto. De lo contrario, rotationResult es una matriz M-por 3, donde M es el máximo de length(quat) y size(cartesianPoints,1).

Tipos de datos: single | double

Algoritmos

La rotación del marco del cuaternión vuelve a hacer referencia a un punto especificado en R3 rotando el marco de referencia original de acuerdo con un cuaternión especificado:

Lq(u)=q*uq

donde q es el cuaternión, * representa la conjugación y u es el punto a rotar, especificado como un cuaternión.

Por conveniencia, la función rotateframe toma un punto en R3 y devuelve un punto en R3. Dada una llamada de función con algún cuaternión arbitrario, q = a + bi + cj + dk, y una coordenada arbitraria, [x,y,z],

point = [x,y,z];
rereferencedPoint = rotateframe(q,point)
la función rotateframe realiza las siguientes operaciones:

  1. Convierte el punto [x,y,z] en un cuaternión:

    uq=0+xi+yj+zk

  2. Normaliza el cuaternión, q:

    qn=qa2+b2+c2+d2

  3. Aplica la rotación:

    vq=q*uqq

  4. Convierte la salida del cuaternión, vq, de nuevo a R3

Capacidades ampliadas

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

Historial de versiones

Introducido en R2019b