Contenido principal

rotateframe

R2026b

Quaternion frame rotation

Description

rotationResult = rotateframe(quat,cartesianPoints) rotates the frame of reference for the Cartesian points using the quaternion, quat. The elements of the quaternion are normalized before use in the rotation.

example

Examples

collapse all

Define a point in three dimensions. The coordinates of a point are always specified in the order x, y, and z. For convenient visualization, define the point on the x-y plane.

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.

Create a quaternion vector specifying two separate rotations, one to rotate the frame 45 degrees and another to rotate the point -90 degrees about the z-axis. Use rotateframe to perform the rotations.

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

Plot the re-referenced points.

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

Define two points in three-dimensional space. Define a quaternion to re-reference the points by first rotating the reference frame about the z-axis 30 degrees and then about the new y-axis 45 degrees.

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

Use rotateframe to reference both points using the quaternion rotation operator. Display the result.

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

    0.6124   -0.3536    0.7071
    0.5000    0.8660   -0.0000

Visualize the original orientation and the rotated orientation of the points. Draw lines from the origin to each of the points for visualization purposes.

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

Input Arguments

collapse all

Quaternion that defines rotation, specified as a quaternion object or a vector of quaternion objects. quat and cartesianPoints must have compatible sizes:

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

  • length(quat) == 1, or

  • size(cartesianPoints,1) == 1

Three-dimensional Cartesian points, specified as a 1-by-3 numeric vector representing a single point or an N-by-3 numeric matrix representing N points. quat and cartesianPoints must have compatible sizes:

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

  • length(quat) == 1, or

  • size(cartesianPoints,1) == 1

Data Types: single | double

Output Arguments

collapse all

Cartesian points defined in reference to rotated reference frame, returned as a 1-by-3 numeric vector or a numeric matrix.

rotationResult is a 1-by-3 vector when quat is a scalar quaternion object and cartesianPoints is a 1-by-3 vector representing a single point. Otherwise, rotationResult is an M-by-3 matrix, where M is the maximum of length(quat) and size(cartesianPoints,1).

Data Types: single | double

Algorithms

Quaternion frame rotation re-references a point specified in R3 by rotating the original frame of reference according to a specified quaternion:

Lq(u)=q*uq

where q is the quaternion, * represents conjugation, and u is the point to rotate, specified as a quaternion.

For convenience, the rotateframe function takes a point in R3 and returns a point in R3. Given a function call with some arbitrary quaternion, q = a + bi + cj + dk, and arbitrary coordinate, [x,y,z],

point = [x,y,z];
rereferencedPoint = rotateframe(q,point)
the rotateframe function performs the following operations:

  1. Converts point [x,y,z] to a quaternion:

    uq=0+xi+yj+zk

  2. Normalizes the quaternion, q:

    qn=qa2+b2+c2+d2

  3. Applies the rotation:

    vq=q*uqq

  4. Converts the quaternion output, vq, back to R3

Extended Capabilities

expand all

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

GPU Code Generation
Generate CUDA® code for NVIDIA® GPUs using GPU Coder™.

Version History

Introduced in R2018a

See Also

Functions

Objects