acircle.getCenter() to (x,y) coordinates in Python
MRAB
python at mrabarnett.plus.com
Sat Dec 23 15:35:36 EST 2017
On 2017-12-23 19:44, G Yu wrote:
> My program has two circles: one stationary circle, drawn at a random location; and one moving circle, consistently drawn in the same place in the graphics window.
>
> The moving circle moves towards the stationary one. However, when the moving circle hits the stationary one (when the x-coordinates of the circles' centers are equal), I want the moving circle to stop moving and then disappear.
>
> I tried the command acircle.getCenter() to determine when the centers are equal, but it doesn't work; I suspect because the centers are never truly equal, and only come within something like .000001 pixels of each other. So to account for the approximation, I used the math function "isclose":
>
> move_moving_circle = True
>
> while move_moving_circle:
> moving_circle.move(P_to_R/P_to_E, E_to_R/P_to_E)
> time.sleep(0.01)
>
> if isclose(moving_circle.getCenter(), stationary_circle.getCenter(), rel_tol=1e-4, abs_tol=0.0):
> move_moving_circle= False
>
> else:
> move_moving_circle = True
>
>
> But this doesn't work. Apparently isclose can't be applied to points - only floating-point decimals.
>
>
> So now, I want to convert the output of "acircle.getCenter()" to Cartesian (x,y) coordinates for both circles. Then I can use the two circle centers' x-coordinates in the if statement.
>
> Currently, acircle.getCenter() outputs this:
>
> <graphics.Point object at 0x0000013E0D263668>
> <graphics.Point object at 0x0000013E0D263B00>
>
> I don't understand/can't use the format that the locations are printed in.
>
> How do I convert the above format to "usable" Cartesian coordinates? Or is there a simpler way to solve this problem?
>
You didn't say what graphics library you're using, but from a quick
search on the internet I think the answer is to use the .getX and .getY
methods of the Point object.
You could calculate the distance between the 2 points, which is sqrt((x1
- x2) ** 2 + (y1 - y2) ** 2). You can speed it up a little by omitting
the sqrt and just remember that you're working with the square of the
distance.
Another point: why do they need to be so close to each other?
Personally, I'd just say they collide when round(distance) < 1 or
round(distance ** 2) < 1.
More information about the Python-list
mailing list