Sign in to follow this  

Eular angle question

This topic is 2081 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi.

I have a very specific problem. Explaining exactly what Im doing is most likely redundent so Im just going to try and explain what I need as best as possible using a simple example.

Im applying a eular angle to a vector in 3D space by first rotating the vector around the x-axes, then y, then z.
Its a givin that for this particular eular angle the same end result can be achived by only rotating around the z axis by a certian amount. For this givin Eualr angle how would I calculate the neccesary rotation around the Z axis.

Thnx in Advance!

Share this post


Link to post
Share on other sites
I could be wrong but it seems like what you are looking for is a quaternion. You can't represent any rotated vector by only rotating it around the Z-Axis. A quaternion is simply a vector in space that can represent your rotation and then an amount of rotation around that axis. But constraining the rotation to only rotating around the Z-Axis will limit your degrees of freedom. Hopefully this is what you were trying to explain. If not, correct me and hopefully I can help.

Share this post


Link to post
Share on other sites
Yes rotating around only 1 axis will limit the degrees of freedom but thats fine. As i tried to explain the input eular angle will always fall within the allowed range as a givin. Heres some actual numbers

rotating a point in 3D space with eular angle


x: 180
y: 180
z: 50

in the order of x,y and then z will have the same effect on the point as just rotating around the z-axis by 130 degrees

so i want to know how i can get from

x: 180
y: 180
z: 50

to

x: 0
y: 0
z: 130

Share this post


Link to post
Share on other sites
When using column vector notation, the Euler rotation is formulated as
[b]R[/b][sub]z[/sub] * [b]R[/b][sub]y[/sub] * [b]R[/b][sub]x[/sub] =: [b]R[/b][sub]E[/sub]
which you want to equal a single z axis rotation, so that
[b]R[/b][sub]E[/sub] = [b]R[/b][sub]z[/sub]'

This implies 9 equations for a single variable (namely the argument angle to [b]R[/b][sub]z[/sub]'), what obviously can be solved in special situations only. When such a situation is actually given, then you have 4 equations like
cos( z' ) = a
cos( z' ) = b
sin( z' ) = c
-sin( z' ) = d
where the numerical values of a and b as well as those of c and -d are obviously the same; further a and c need to differ in a phase shift of 90 degree.

When you use the arccos or arcsin function for solving, then you get a result that covers a half circle only. So you need to take 2 of the above functions into account. One way to do this is to choose e.g.
tan( z' ) = sin( z' ) / cos( z' ) = a / c
and hence
z' = arctan( a / c )
in principle. However, this formula still has problems, because it (1.) is vulnerable against c==0 and (2.) only 2 of the 4 quadrants can be identified (i.e. the same problem as those above).

Fortunately, most programming languages provide a variant of arctan that internally deals with this problem. This function is usually named atan2. So try
z' = atan2( c, a )
where a and c are picked from the combined Euler rotation matrix.


FYI: The above does something like looking at the problem in the 2D space given by the x/y plane. It sees a vector (a c)[sup]t[/sup] and computes the angle that is between the principal x axis and the vector. You can find several discussions of this in this forum if you search for e.g. "atan2".

Share this post


Link to post
Share on other sites
I once wrote some examples about generic Euler angle conversions:

[url="http://khayyam.kaplinski.com/2011/02/converting-rotation-matrix-to.html"]http://khayyam.kapli...-matrix-to.html[/url]
[url="http://khayyam.kaplinski.com/2011/06/more-about-matrix-to-euler-angles.html"]http://khayyam.kapli...ler-angles.html[/url]

These allow you:[list]
[*]Convert rotation matrix to arbitrarily ordered Euler angles (useful for animations)
[*]Pick the smallest set of angles from alternate rotation variants (that is what you needed)
[*]Pick the set of angles from alternate rotation variants that is closest to some previous set (useful for animations)
[*]Should be gimbal-lock safe
[/list]

Share this post


Link to post
Share on other sites

This topic is 2081 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this