#### Archived

This topic is now archived and is closed to further replies.

# Angle between 2 3d Vectors

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

## Recommended Posts

Hu all I was wondering if anyone can give me a formula that gives the xz plane(yaw) and y plane(pitch) between 2 points in a 3D enviroment. Thanks Eoin

##### Share on other sites
P1(x,y,z)P2(x,y,z)yaw1 = atan2(P1.y, P1.x);yaw2 = atan2(P2.y, P2.x);deltayaw = yaw2-yaw1;pitch1 = atan2(P1.z, sqrt(P1.x*P1.x+P1.y*P1.y));pitch2 = atan2(P2.z, sqrt(P2.x*P2.x+P2.y*P2.y));deltapitch = pitch2-pitch1;

PS: this is assuming your Z axis is the up axis (your pitch), you can easily modify this if your Y axis is the up axis...

[edited by - SpaceDude on April 21, 2004 6:15:36 PM]

Perfect, thanks

##### Share on other sites
this is wrong I think. P1 and P2 are positions in space, so you just do

D = P2 - P1
yaw = atan2(D.y, D.x);
pitch = atan2(D.z, sqrt(D.x*D.x+D.y*D.y));

in general you have to be careful when comparing angles, since if say, pitch2 = 355 degrees, and pitch1 = 0 degrees, it will give a deviation of 355 degrees. so you may have to take the minimum between (pitch2 - pitch1), (pitch2 - pitch1) - 360. idem if pitch2 = 0, pitch1 = -355, ...

so always think of wrapping around angle differences, if required.

##### Share on other sites
Thats great guys, Thanks

##### Share on other sites
hum... ok maybe i miss-understood your question...

what i was giving you is the difference in yaw and pitch for two vectors:

(0,0,0) to P1(x,y,z)
and
(0,0,0) to P2(x,y,z)

If you wanted just the yaw relative to the positive x-axis and pitch relative to the x/y plane (or x/z) of the vector from P1 to P2 then use what oliii said.

##### Share on other sites
If your vectors are normalised, I think it would be faster to use:

Angle = acos(Vec3Dot(v1, v2))

Particularly if you were using a lookup table for the arccos. But I think having to normalise the vectors manually would probably make this method slower than the one above... Not too sure where to draw the line.

##### Share on other sites
quote:
Original post by TheAdmiral
If your vectors are normalised, I think it would be faster to use:

Angle = acos(Vec3Dot(v1, v2))

Particularly if you were using a lookup table for the arccos. But I think having to normalise the vectors manually would probably make this method slower than the one above... Not too sure where to draw the line.

that only gives the angle between the two vectors... not the yaw and pitch between the two vectors...

and nevermind trying to speed up all those trig functions using lookup tables, i saw some other post where people where trying to do it and they failed miserably.

[edited by - SpaceDude on April 24, 2004 11:19:35 AM]

1. 1
2. 2
3. 3
Rutin
18
4. 4
5. 5

• 10
• 14
• 30
• 13
• 11
• ### Forum Statistics

• Total Topics
631787
• Total Posts
3002351
×