If I have 2 points (x0,y0) which is the center of the circle, and another point (x,y) (this is the red dot on the circle boundary in the image). How can I get the angle of the dot?
Note, it should return an angle in degrees, from [0,360). The red dot angle in the image is approximately 70 degrees.
How can I do this in python?
Thanks
This doesn't seem to work.
(dx, dy) = (x0-x, y-y0)
angle = atan(float(dy)/float(dx))
if angle < 0:
angle += 180
You were very close :-)
Change this:
angle = atan(float(dy)/float(dx))
To this:
angle = degrees(atan2(float(dy), float(dx)))
The atan2() function is between than atan() because it considers the signs to the inputs and goes all the way around the circle:
atan2(...)
atan2(y, x)
Return the arc tangent (measured in radians) of y/x.
Unlike atan(y/x), the signs of both x and y are considered
The degrees() function converts from radians to degrees:
degrees(...)
degrees(x)
Convert angle x from radians to degrees.
Also, as Rich and Cody pointed-out you need to fix your dy calculation.
In addition to converting from radians, consider using atan2
instead of atan
. Whereas atan
will give the same answer for points on the opposite side of the circle, atan2
will give you the correct angle, taking into account the signs of both dx
and dy
. It takes two arguments:
angle = math.degrees(math.atan2(y0 - y, x0 - x)) % 360
Note that atan2
will return something between -pi
and pi
, or -180 degrees and 180 degrees, so the % 360
is to shift the result to your desired range.
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