以下是一个简单的示例代码,演示了如何检测圆形和正方形之间的碰撞:
import math
def check_collision(circle_pos, circle_radius, square_pos, square_side):
# 计算圆心到正方形中心的距离
dx = abs(circle_pos[0] - square_pos[0])
dy = abs(circle_pos[1] - square_pos[1])
distance_x = dx - square_side / 2
distance_y = dy - square_side / 2
# 计算圆心到正方形边界的最近距离
nearest_x = min(max(distance_x, -square_side / 2), square_side / 2)
nearest_y = min(max(distance_y, -square_side / 2), square_side / 2)
# 计算最近距离的平方
sqr_distance = nearest_x**2 + nearest_y**2
# 圆形和正方形碰撞当且仅当最近距离的平方小于圆的半径的平方
return sqr_distance < circle_radius**2
# 示例用法
circle_pos = (0, 0) # 圆形的位置
circle_radius = 5 # 圆形的半径
square_pos = (10, 10) # 正方形的位置
square_side = 10 # 正方形的边长
collision = check_collision(circle_pos, circle_radius, square_pos, square_side)
print(collision) # 输出 True 或 False,表示是否发生碰撞
在上述代码中,check_collision
函数接受圆形和正方形的位置、尺寸作为参数,并计算圆心到正方形边界的最近距离。然后,将最近距离的平方与圆的半径的平方进行比较,以判断是否发生碰撞。返回值为布尔值,表示是否发生碰撞。
请注意,上述代码仅适用于圆心位于正方形中心的情况。如果圆形和正方形的位置不同,请根据实际情况进行适当的调整。另外,该代码仅适用于2D碰撞检测,如果需要进行3D碰撞检测,需要进行适当的修改。