Implementing cosine algorithm to angle checking

Started by
2 comments, last by Afterlife 22 years, 6 months ago
c>2 = a>2 * b>2 * 2 * cos(angle), Can someone tell how it's done properly? I have two points and I need to check the angle between them compared to 0 degrees. I imagined a triangle that has player's coords as one point, mouse coords as another one and a imaginary point 1 unit up from player coords. Example :
     //Let's pretend this is as a triangle

i_ //imaginary

|.\_
p\..\_ //player

...\__.......m //mouse

  
Here is my attempt to implement the algorithm :
      
a=1;
//a is the side that goes from player crds to imaginary point

b=sqrt((mouse_x-xplayer)*(mouse_x-xplayer)+(mouse_y-yplayer)*(mouse_y-yplayer));
//b is the other side of the triangle, it goes from player crds to mouse crds

c=sqrt((mouse_x-xplayer)*(mouse_x-xplayer)+(mouse_y-(yplayer-1))*(mouse_y-(player-1)));
//c is the side opposite to the angle, it goes from i to m

angle=acos((c*c)/(2.0*a*a*b*b));
if(mouse_x<xplayer) angle+=pii;
    
The result is no where near what I expected. Anyone know how to implement it the right way or tell me another easier way? Edited by - Afterlife on October 6, 2001 10:53:41 AM
------------------------------If there be no heaven,may there atleast be a hell.-------------------------------Afterlife-
Advertisement
I think the formula you're looking for is:
a² = b² + c² - 2bc * cos(angle)
Where 'a', 'b' and 'c' are the side lengths, and the angle is opposite 'a'. Someone correct me if I'm wrong, it's pretty late

Argh -- what's the superscript tag? Rrgh. Let's see if the ANSI superscripted two works.

Edited by - Dracoliche on October 6, 2001 2:01:00 PM
Oh yes indeed. I remembered the formula incorrectly :| Thanks

*need to find a school and fast*

Edit : also spotted another error in the code, but now it works

Edited by - Afterlife on October 6, 2001 2:59:00 PM
------------------------------If there be no heaven,may there atleast be a hell.-------------------------------Afterlife-
The angle between two vectors is the scalar (dot) product of the vectors divided by the product of the vector magnitudes.ie

A *B = |A ||B |cos(theta)
cos(theta) = (A *B ) / (|A ||B |)

Assuming the player is at a point P, the mouse is at M and we choose a point up from the player U, your two vectors are
A = U - P
B = M - P

Just in case you''re rusty on vector math, the differences are:
U - P = (U.x - P.x, U.y - P.y);
M - P = (M.x - P.x, M.y - M.x);
The scalar product is:
A * B = (A.x * B.x) + (A.y * B.y)
And the magnitudes are:
|A| = sqrt( A.x2 + A.y2 );
|B| = sqrt( B.x2 + B.y2 );

This topic is closed to new replies.

Advertisement