I am writing a game in Python with Pygame.
The co-ords (of my display window) are( 0 , 0 )
at the top left and(640,480)
at the bottom right.
The angle is0°
when pointing up,90°
when pointing to the right.
I have a player sprite with a centre position and I want the turret on a gun to point towards the player. How do I do it?
Say,x1
,y1
are the turret co-ordsx2
,y2
are the player co-ordsa
is the angle's measure
Normally, you'd use atan2(dy,dx) but because Pygame flips the y-axis relative to Cartesian coordinates (as you know), you'll need to make dy negative and then avoid negative angles. ("dy" just means "the change in y".) degs ought to be what you're looking for.
The tangent of the angle between two points is defined as delta y / delta x That is (y2 - y1)/(x2-x1). This means that math. atan2(dy, dx) give the angle between the two points assuming that you know the base axis that defines the co-ordinates.
We can calculate the angle between two vectors by the formula, which states that the angle of two vectors cosθ is equal to the dot product of two vectors divided by the dot product of the mod of two vectors. A, B are two vectors and θ is the angle between two vectors A and B.
First, math
has a handy atan2(denominator, numerator)
function. Normally, you'd use atan2(dy,dx)
but because Pygame flips the y-axis relative to Cartesian coordinates (as you know), you'll need to make dy
negative and then avoid negative angles. ("dy" just means "the change in y".)
from math import atan2, degrees, pi
dx = x2 - x1
dy = y2 - y1
rads = atan2(-dy,dx)
rads %= 2*pi
degs = degrees(rads)
degs
ought to be what you're looking for.
Considering a triangle
sin(angle)=opposed side / hypotenuse
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