I'm creating a simple 2D game in javascript/canvas. I need to figure out the angle of a certain object relative to my position.
So: say I'm at (10,10) and the object is at (10,5) - that would result in 90 degrees (as positive Y is down, negative Y is up) (10,10) vs (10,15) would be 270 degrees.
How would I go about this?
The angle of rotation between the two points or vertices is the number of central angles times the measure of a single central angle: angle of rotation =m×α = m × α .
Suppose you're at (a, b) and the object is at (c, d). Then the relative position of the object to you is (x, y) = (c - a, d - b).
Then you could use the Math.atan2()
function to get the angle in radians.
var theta = Math.atan2(-y, x);
note that the result is in the range [-π, π]. If you need nonnegative numbers, you have to add
if (theta < 0) theta += 2 * Math.PI;
and convert radians to degrees, multiply by 180 / Math.PI
.
If your coordinates are (xMe, yMe) and their coordinates are (xThem, yThem), then you can use the formula:
arctan((yMe-yThem)/(xThem-xMe))
Normally it'd be arctan((yThem-yMe)/(xThem-xMe))
, but in this case the sign of the y-axis is reversed.
To convert the result from radians to degrees multiply by 180/pi.
So in JavaScript, this would look like: Math.atan((yThem-yMe)/(xThem-xMe))*180/Math.PI
atan gives a value between -pi/2 and pi/2 (that is, between -90 and 90 degrees). But you can look at what quadrant your (xThem - xMe, yMe - yThem) vector is in and adjust accordingly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With