Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Rotation,angle of vector from axes ?

  1. Jan 26, 2013 #1
    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. jcsd
  3. Jan 28, 2013 #2

    Stephen Tashi

    User Avatar
    Science Advisor

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

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    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.
     
  5. Jan 28, 2013 #4
    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.
     
  6. Jan 30, 2013 #5

    Stephen Tashi

    User Avatar
    Science Advisor

    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?
     
  7. Jan 30, 2013 #6
    Yes, of course. The left axis changes when rotation around the up is performed, and vice versa.
     
  8. Jan 30, 2013 #7

    Stephen Tashi

    User Avatar
    Science Advisor

    Which alternative are you agreeing to?
     
  9. Jan 30, 2013 #8
    To this:
    Yes , like a regular 3rd person camera, viewing left/right and up/down.
     
  10. Jan 30, 2013 #9

    Stephen Tashi

    User Avatar
    Science Advisor

    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.
     
  11. Jan 30, 2013 #10
    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.
     
  12. Jan 30, 2013 #11

    Stephen Tashi

    User Avatar
    Science Advisor

    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.
     
  13. Jan 30, 2013 #12

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    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 [itex]\hat x + \hat y + \hat z[/itex], while the latter is equivalent to a single 120 degree rotation about an axis pointing along [itex]\hat x + \hat y - \hat z[/itex].
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook