Say I have a point A at (1,3) and a point B at (2,1) and point B has an angle of 45 degrees. I need a formula that will tell me which direction (right or left) B should turn so it points at A the fastest.

--(my attempt)--
I originally pretended that B was the center of a circle and A was on the ring of the circle. I then found the area of the sector and stored my results in SECTOR_AREA.

Next, I took the full area of the circle and divided it by 2 and called it HALF_AREA.

If SECTOR_AREA > HALF_AREA then TURN RIGHT
If SECTOR_AREA < HALF_AREA then TURN LEFT

The problem is I'm getting strange results with this ^^^ formula ^^^ and it's not working. I'm not sure why? Should it work? Might I have entered the wrong formula? What would be a good alternative to this?

4
Contributors
5
Replies
6
Views
8 Years
Discussion Span
Last Post by scarypajamas

Read up on arctan. It might give you a few ideas...

There are several algorithms. Here are a couple...

N degree angle passing though point B is a line from + infinity to - infinity. Which side of the line is point A?

Inverse Tan y/x gives you the angle. of B-A

I am too tired right now to try that formula out. But you could consider:
if(A.angle < 180)
if(B.angle > A.angle && B.angle < A.angle + 180)
//turn counter-clockwise
else
//turn clockwise
else
if(B.angle < A.angle && B.angle < A.angle - 180)
//turn clockwise
else
//turn counter-clockwise
Again, really tired so those might be backwards. Hope this helps.

Use fmod to handle angles set > < 360 degrees.

If you decide to use trig functions don't forget to convert degrees to radians.

PI is 180 degrees.
+/- PI.

Thanks for all your help guys, I was able to figure it out now :)

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.