# Relative angles with dot product (2D)

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

## Recommended Posts

Hi.

I recently found a dot product relative angle calculation for unit vectors as follows:

[font="courier"]float Vector2D::angleBetween(const Vector2D& other) const { float dp = dot(other); if(dp >= 1.0) dp = 1.0f; else if(dp <=-1.0) dp = -1.0f; float angPi = (float)acos(dp); //side test return y*other.x > x*other.y ? -angPi : angPi; }[/font]

But i could not figure out where this "side test" came from.
Does it work? And how?

I usually use the traditional atan2 - atan2 calculation, but if this solution is really correct I could use in machines where this atan2 is not implemented.

##### Share on other sites
Sorry, just now I realised that this is a disguised test of the perp dot product signal.

##### Share on other sites
You could simply do this:

angle = atan2( abs( cross( v2, v1 ), dot( v2, v1 ) );

##### Share on other sites

You could simply do this:

angle = atan2( abs( cross( v2, v1 ), dot( v2, v1 ) );

Man, you should read the question before giving out some canned answer.

##### Share on other sites
Also, just FYI, that" canned answer" is a bit wrong. Although the norm of the cross product gives you the magnitude of the sine of the angle, it doesn't give the sign, which is really what matters. Without that, you have no more information than the cosine gives you. You need the full determinant, sign included. I liked Vini's description as "perp dot product."

• 16
• 9
• 13
• 41
• 15