30 lines
No EOL
826 B
Python
30 lines
No EOL
826 B
Python
import pygame
|
|
|
|
|
|
def rect_circle_collision(rect, circle):
|
|
rect_x, rect_y, rect_w, rect_h = rect
|
|
circle_x, circle_y, circle_r = circle
|
|
|
|
# Calculate the closest point on the rectangle to the center of the circle
|
|
closest_x = max(rect_x, min(circle_x, rect_x + rect_w))
|
|
closest_y = max(rect_y, min(circle_y, rect_y + rect_h))
|
|
|
|
# Calculate the distance between the center of the circle and the closest point on the rectangle
|
|
dx = circle_x - closest_x
|
|
dy = circle_y - closest_y
|
|
distance = (dx ** 2 + dy ** 2) ** 0.5
|
|
|
|
return distance <= circle_r
|
|
|
|
|
|
# Example usage
|
|
pygame.init()
|
|
rect = (100, 100, 200, 200) # (x, y, width, height)
|
|
circle = (150, 150, 50) # (x, y, radius)
|
|
|
|
if rect_circle_collision(rect, circle):
|
|
print("Collision detected!")
|
|
else:
|
|
print("No collision.")
|
|
|
|
pygame.quit() |