Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to represent a 4x4 matrix rotation?

Tags:

math

matrix

Given the following definitions for x,y,z rotation matrices, how do I represent this as one complete matrix? Simply multiply x, y, & matrices?

X Rotation:

[1 0 0 0]
[0 cos(-X Angle) -sin(-X Angle) 0]
[0 sin(-X Angle) cos(-X Angle) 0]
[0 0 0 1]

Y Rotation:

[cos(-Y Angle) 0 sin(-Y Angle) 0]
[0 1 0 0]
[-sin(-Y Angle) 0 cos(-Y Angle) 0]
[0 0 0 1]

Z Rotation:

[cos(-Z Angle) -sin(-Z Angle) 0 0]
[sin(-Z Angle) cos(-Z Angle) 0 0]
[0 0 1 0]
[0 0 0 1] 

Edit: I have a separate rotation class that contains an x, y, z float value, which I later convert to a matrix in order to combine with other translations / scales / rotations.

Judging from the answers here, I can assume that if I do something like:

Rotation rotation; rotation.SetX(45); rotation.SetY(90); rotation.SetZ(180);

Then it's actually really important as to which order the rotations are applied? Or is it safe to make the assumption that when using the rotation class, you accept that they are applied in x, y, z order?

like image 739
Mark Ingram Avatar asked Oct 20 '10 21:10

Mark Ingram


Video Answer


1 Answers

Yes, multiplying the three matrices in turn will compose them.

EDIT:

The order that you apply multiplication to the matrices will determine the order the rotations will be applied to the point.

P × (X × Y × Z)     Rotations in X, Y, then Z will be performed
P × (Y × X × Z)     Rotations in Y, X, then Z will be performed
P × (Z × X × Y)     Rotations in Z, X, then Y will be performed
like image 55
Ignacio Vazquez-Abrams Avatar answered Nov 04 '22 11:11

Ignacio Vazquez-Abrams