# Rotation,angle of vector from axes ?

1. Jan 26, 2013

### atrus_ovis

How to find that? In R3.
I want to rotate everything around a vector, at an angle A. (making a n openGL game at my free time)

I tried , for normalized vector V = <x,y,z>:
Displace V to start of axes.

angleToYZ = acos(y);
Rotate all around Z with that angle. (1)

angleToZ = acos(z);
Rotate all around X with that angle. (2)

Now V is on the Z axis.
Rotate all around Z with angle A.

perform (2) , (1) with opposite respective angles.

Problem is, when i implement that for rotation around another vector, individually the rotations work, but when i.e. i do a rotation around V1, then the rotation around V2 gets messed up.

Is there a mathematical error in the above?

2. Jan 28, 2013

### Stephen Tashi

Your question isn't clear. Are you trying to rotate an object simultaneously about two different axes, V1 and V2?

3. Jan 28, 2013

### D H

Staff Emeritus
Yes. That's just not how rotations in R3 (three dimensional space) work.

You appear to be confusing an Euler rotation sequence with a single axis rotation (or eigenrotation, or angle/axis representation). The latter are very closely aligned with quaternions. openGL provides various quaternionic representations of a rotation. The easiest thing is to convert that single that single axis rotation to a quaternion and let openGL do the work.

This wikipedia page provides a good start if you want to understand the math: http://en.wikipedia.org/wiki/Axis-angle_representation.

4. Jan 28, 2013

### atrus_ovis

I have two vectors, v1, v2 ( the "up" and "left" vector of an object) and i want to rotate with respect to them, to implement left/right rotation and up/down rotation.

But since i am aligning the reference vector with an axis, rotating via that axis, and performing the inverse alignment operations, shouldn't the desired rotation be the result?

I had tried an "intro to quaternions" via a linear algebra intro pdf, but failed.I'll try wikipedia.

5. Jan 30, 2013

### Stephen Tashi

If you rotate about the "up" axis, it moves the "left" axis to a new position. Is your intent to do the next rotation about the "new left" axis? Or are you trying to rotate about the original left axis?

6. Jan 30, 2013

### atrus_ovis

Yes, of course. The left axis changes when rotation around the up is performed, and vice versa.

7. Jan 30, 2013

### Stephen Tashi

Which alternative are you agreeing to?

8. Jan 30, 2013

### atrus_ovis

To this:
Yes , like a regular 3rd person camera, viewing left/right and up/down.

9. Jan 30, 2013

### Stephen Tashi

It isn't clear what algorithm you are using to perform a rotation. Let's assume you are multiplying a column vector v on the left by a matrix M to produce the new column vector u. So u = Mv. You're idea is to use a matrix T (which is the product of two other matrices) to transform 3 axes of object back to the xyz axes, use a matrix R (whichis is the product of two othe matrices) to perform rotations about the xyz axes and use the matrix T-inverse to transform the the xyz axes back to the original axes of the object. I think this idea works if properly implemented, but I can't tell from what you wrote exactly how you implemented it.

10. Jan 30, 2013

### atrus_ovis

I use the matrices from here

http://en.wikipedia.org/wiki/Rotation_matrix#Basic_rotations

to perform the rotations of each vector.

Instead of using a "combined" matrix i do the rotations one after another,which us equivalent.
Instead of using the inverse, i just use the negative angles, which is also equivalent for these rotation matrices (negative angle = inverse)

Problem is,as i said : individually doing left/.right or up/down rotations works fine.
But when doing a left-right and then up-down (and vice versa) , the 2nd rotation gets messed up.

The cross product of the 2 rotating vectors doesn't equal the third (the reference for the rotation) after the above.

11. Jan 30, 2013

### Stephen Tashi

That's not a sufficiently specific description of your method for anyone to check. You need to explicity write out the product of matrices that you used.

12. Jan 30, 2013

### D H

Staff Emeritus
Equivalent to what?

Rotations in 3D space are a bit counterintuitive. They do not obey nice laws. Unlike rotations in 2D space, they are neither commutative nor additive. Rotation A followed by rotation B is not the same as rotation B followed by rotation A. Example: Rotate by 90 degrees about the x axis, then by 90 degrees about the y' axis (the orientation of the y axis after being rotated by 90 degrees). This is quite different from rotating by 90 degrees about the y axis and then rotating by 90 degrees about the x' axis. The former is equivalent to a single 120 degree rotation about an axis pointing along $\hat x + \hat y + \hat z$, while the latter is equivalent to a single 120 degree rotation about an axis pointing along $\hat x + \hat y - \hat z$.