Main Content


Quaternion point rotation

Since R2019b



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



collapse all

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

x = 0.5;
y = 0.5;
z = 0;

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 point 45 and another to rotate the point -90 degrees about the z-axis. Use rotatepoint to perform the rotation.

quat = quaternion([0,0,pi/4; ...
rotatedPoint = rotatepoint(quat,[x,y,z])
rotatedPoint = 2×3

   -0.0000    0.7071         0
    0.5000   -0.5000         0

Plot the rotated points.


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 rotate the point by first rotating 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 rotatepoint to rotate both points using the quaternion rotation operator. Display the result.

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

    0.6124    0.5000   -0.6124
   -0.3536    0.8660    0.3536

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


hold on
grid on
axis([-1 1 -1 1 -1 1])



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

Rotated Cartesian points defined using the quaternion rotation, 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


Quaternion point rotation rotates a point specified in R3 according to a specified quaternion:


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

For convenience, the rotatepoint function takes in 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], for example,

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

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


  2. Normalizes the quaternion, q:


  3. Applies the rotation:


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

Extended Capabilities

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

Version History

Introduced in R2019b