Jump to content

  • Log In with Google      Sign In   
  • Create Account


Relative angles with dot product (2D)


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 ViniGodoy   Members   -  Reputation: 100

Like
0Likes
Like

Posted 05 August 2011 - 01:09 PM

Hi.

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

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;
}


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.

Sponsor:

#2 ViniGodoy   Members   -  Reputation: 100

Like
0Likes
Like

Posted 05 August 2011 - 01:31 PM

Sorry, just now I realised that this is a disguised test of the perp dot product signal.

#3 Dirk Gregorius   Members   -  Reputation: 714

Like
-1Likes
Like

Posted 05 August 2011 - 02:00 PM

You could simply do this:

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

#4 Álvaro   Crossbones+   -  Reputation: 11906

Like
0Likes
Like

Posted 05 August 2011 - 02:51 PM

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.

#5 Emergent   Members   -  Reputation: 967

Like
1Likes
Like

Posted 07 August 2011 - 03:20 PM

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."




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS