114 views (last 30 days)

I have a direction defined by azimuth and evation (e.g. Azi, Elev).

I would like to calculate values of these Azi i Elev after coordinate system

rotation: first around Z axis (angle e.g.: Zrot) and then around rotated (in first rotation

around Z axis) Y axis (angle e.g.: Yrot).

So: I rotate coordinate system around Z axis, then around "rotated" Y axis and I would like to

calculate Azi and Elev in rotated coordinate system.

How can be it done?

David Goodmanson
on 12 Jan 2020

Edited: David Goodmanson
on 12 Jan 2020

Hi UWM,

Assuming the correct rotation has already been made, then calling the resulting vector u, and making sure it is normalized by using u/norm(u), suppose the three components of u are given in the order (north,east, up) in an appropriate coordinate system. Assuming elevation is measured up from the horizon and azimuth is measured clockwise from north (as with a compass rose), u has the form

cos(el)*cos(az)

cos(el)*sin(az)

sin(el)

then you can divide the second expression by the first to arrive at

el = asin(u(3))

az = atan2(u(2)/u(1)

There are a lot of variations on this theme depending on how the vector components and the angles are defined, but the basic idea will be the same.

David Goodmanson
on 15 Jan 2020

Hi UWM,

Although there is more than one convention for how to do this, I am guessing that you are doing an active rotation, i.e. there is an overall fixed coordinate system S and you are rotating a vector object within that system. After a series of rotations, the final result is expressed as coordinates in S.

You are expressing the vector as a row vector and multiplying by rotation matrices on the right. If you have not done so already, it's a good idea to run some test cases on rotz,roty and also rotx at, say, 45 degrees to verify that they are doing what you think.

Now you wish to first rotate about the z axis, which rotates the object and also rotates the y and x axes to xnew and ynew. That's followed by a rotation about ynew.

Abbreviating rotz as Rz etc, a rotation of v about the z axis followed by a rotation about the old y axis would have been

vrot = v*Rz*Ry [1]

the matrix Rynew, a rotation about ynew, is related to the original Ry by

Rynew = Rz^(-1)*Ry*Rz

and so

vrot = v*Rz*Rz^(-1)*Ry*Rz = v*Ry*Rz

This uses rotations involving the original coordinate system, only with the order reversed compared to [1]. Hope this helps.

Opportunities for recent engineering grads.

Apply TodayFind the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
## 1 Comment

## Direct link to this comment

https://uk.mathworks.com/matlabcentral/answers/499842-how-to-calculate-direction-in-rotated-coordinate-system#comment_785179

⋮## Direct link to this comment

https://uk.mathworks.com/matlabcentral/answers/499842-how-to-calculate-direction-in-rotated-coordinate-system#comment_785179

Sign in to comment.