• Advertisement
Sign in to follow this  

Relative angles with dot product (2D)

This topic is 2359 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 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 this post


Link to post
Share on other sites
Advertisement

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 this post


Link to post
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."

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement