omega - 3 months ago 6x

Python Question

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

Answer

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.

Source (Stackoverflow)

Comments