from matrix to radians

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

Recommended Posts

I have a 4x4 matrix with the orientation and location of an object. It's a ms directx style matrix (I think it's the opposits of opengl if I remember correctly) Anyway, how do I convert my orrientation into radians (or degrees) along any of the 3 axis? For my specific instance I want to determine how far I'm rotated around the Y axis, so I can convert that to a compass heading. Thanks

Share on other sites
You may be looking for matrix-to-Euler-angle conversion. There are many ways to do such a conversion, and there are a lot of things to take into account. Once you do get a conversion function working, there are still multiple Euler angle triples that will describe the same rotation. So you either have to tweak your function to observe certain constraints, or be able to work with whatever the function gives you. (I know DirectX has an Euler-to-matrix function, but I don't know if it has a matrix-to-Euler function...)

However, when you say 'compass heading', that suggests to me that there are some constraints on your rotations - for example, as with a character or vehicle. For such a case simpler solutions exist. For example, for an object that will remain more or less upright, the 'yaw' angle can be found using atan2() with the appropriate matrix elements as arguments.

Share on other sites
Quote:
 Original post by QuadMVFor my specific instance I want to determine how far I'm rotated around the Y axis, so I can convert that to a compass heading.

If you want the compass heading of the transformed objects y-axis, as projected onto the xy-plane, you could do something like angle=atan2(t(1,2),t(2,2)), where t(i,j) is the transformation matrix element at row i and column j.

Share on other sites
Great, atan2 is what I needed, but now I need help tweaking it.

It's working if my object remains level, but if my object rotates vertically, slightly above the horrizon, it flips 180. I understand the flip, but not above the horrizon, it's off by 90 degrees (or so) for me. I don't want it to flip before I'm either orriented straight up or straight down.

For what it's worth, I'm initially set to the identity matrix, so when I'm looking up it's just beyond that setting.

Thanks for all the help

Share on other sites
Actually, let me pose another question,

I found burried in my math libs a function to get Euler but I never really understood how it works.

It seems to flip flop every 90 degrees, so if I try and rotate around the y axis say, it seems to flip as I cross the X or Z axis. I kind of understand what it's doing, but I don't know the math to compinsate so I get an ever incrementing value from 0-360 (or 0-3.14 (that's rads right?)) without flip flop? I'm trying to display my heading or compass reading.

Thanks

Share on other sites
Sorry, I see now that I misread you post. You say you rotate the object around the y-axis, while my answer assumed the z-axis. Just change "2" to "3" in the above solution and I expect it should work alright.

Share on other sites
can you explain?

the Y axis would be up down, x = side to side, z = in out, therefore the terrain would be along the x,z and the rotation would be along the Y, right? I know this to be true, because I can navigate correctly in 3D space with yaw, pitch, roll as described above.

That being said, I wasn't using 21,22. I thought that was just an example, but I went back and tried it and it worked but in the wrong way. If I rotate the object around the X axis, I correctly get back the angle I want, but I don't want it when I'm rotating around the X, I want it around the Y. What's confusing is that 2a is the y axis. Anyway, I tried 11,12 and 31,32 but neither work the way 21,22 is.

I'm pretty certain I'm doing something wrong, but the math is my Achilles heel.

Also, as I mentioned, I have the GetEular function, but I'm not sure how to apply it witht he values it's returning?

Share on other sites
that last post was me, I didn't realize I wasn't logged in.

Let me add something that maybe will clarify some of my problem:

I'm calling GetEular (from this paper: http://skal.planet-d.net/demo/matrixfaq.htm#Q37 )

When I start with my object set to the identity matrix, and I just rotate around the Y axis only, here is what I get when facing:

north 0,0,0
north (a little to the east) 0,6,0
north (a little to the west) 0,0,0

east 0,4.7 (give or take), 0

south (a little to the east) 0,6,0
south (a little to the west) 0,0,0

west 0,1.5 (give or take), 0

*************************************************************
Notice, with rotating toward the east, it's always between
4-6
*************************************************************

*************************************************************
Notice, with rotating toward the west, it's always between
0-1.5
*************************************************************

what is going on, and how do I get it to show 0-360 (or 0-3.14)

It seems like this should be trivial, I'm I doing something major wrong?

Thanks

Share on other sites
I got it working thanks to DrakeX, see his reply in

http://www.gamedev.net/community/forums/topic.asp?topic_id=333390

If you are interested.

this was a similar thread I posted in the DirectX forum instead of the math forum.

Thanks to all for helping, and I'd still be interested in understanding what I might have been doing wroing with what had been suggested.

• Game Developer Survey

We are looking for qualified game developers to participate in a 10-minute online survey. Qualified participants will be offered a \$15 incentive for your time and insights. Click here to start!

• 16
• 11
• 24
• 42
• 75