omega omega - 1 year ago 140
Python Question

How to get angle of point from center point?

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?


This doesn't seem to work.

(dx, dy) = (x0-x, y-y0)
angle = atan(float(dy)/float(dx))
if angle < 0:
angle += 180

enter image description here

Answer Source

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(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:


    Convert angle x from radians to degrees.

Also, as Rich and Cody pointed-out you need to fix your dy calculation.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download