# I want to rotate a point using Quaternion function

8 views (last 30 days)

Show older comments

i want to rotate point (1,2,3) about x-axis by 45 using quaternion function

i tried to put it in identity matrix and rotate it but it's not working also i want to plot is q.plot()

here is the function of the matlab

P = [1 2 3];

R = transl(P)*eul2tr([0 0 0])

q = Quaternion(R)

R1 = R * trotx(45);

q1 = Quaternion(R1)

##### 2 Comments

James Tursa
on 6 Apr 2020

### Accepted Answer

James Tursa
on 6 Apr 2020

Edited: James Tursa
on 6 Apr 2020

I took a look at this related link:

In there is the code for converting a direction cosine matrix to quaternion called tr2q.m. Based on that code I get the following comparison:

>> q = rand(1,4)*2-1 % start with a random quaternion

q =

0.6294 0.8116 -0.7460 0.8268

>> q = q/norm(q)

q =

0.4155 0.5357 -0.4925 0.5457

>> dcm = quat2dcm(q) % Aerospace Toolbox conversion to dcm

dcm =

-0.0807 -0.0741 0.9940

-0.9812 -0.1697 -0.0923

0.1755 -0.9827 -0.0590

>> tr2q(dcm) % Peter Corke published code conversion dcm to quaternion

ans =

0.4155 -0.5357 0.4925 -0.5457

>> dcm2quat(dcm) % Aerospace Toolbox conversion dcm to quaternion

ans =

0.4155 0.5357 -0.4925 0.5457

And a comparison with the Robotics Toolbox functions:

>> quat2dcm(q) % Aerospace Toolbox

ans =

-0.0807 -0.0741 0.9940

-0.9812 -0.1697 -0.0923

0.1755 -0.9827 -0.0590

>> quat2rotm(q) % Robotics Toolbox

ans =

-0.0807 -0.9812 0.1755

-0.0741 -0.1697 -0.9827

0.9940 -0.0923 -0.0590

>> dcm2quat(dcm) % Aerospace Toolbox

ans =

0.4155 0.5357 -0.4925 0.5457

>> rotm2quat(dcm) % Robotics Toolbox

ans =

0.4155 -0.5357 0.4925 -0.5457

So you can see that the quaternion conversions are conjugates of each other. So you need to be very careful how you use the Peter Corke code or the Robotics Toolbox code when comparing with or using MATLAB quaternion functions from the Aerospace Toolbox.

If I were to guess, maybe the Peter Corke and Robotics Toolbox code is intended for active vector rotations (rotating a vector within the same coordinate frame). But that is just a guess on my part since I have never used this code.

See this link for a discussion of the MATLAB toolbox quaternion conventions:

##### 0 Comments

### More Answers (2)

Matt J
on 6 Apr 2020

You could also try this FEX submission instead of the Quaternion class

>> AxelRot([1;2;3], 45, [1 0 0], [])

ans =

1.0000

-0.7071

3.5355

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!