如果着陆器矩形是轴对齐的(其边缘与坐标轴平行),则很容易检查与圆的碰撞。给定一个具有半径r
和中心的圆和一个具有原点、宽度和高度(cx, cy)
的矩形;如果满足以下条件之一,它们就会发生碰撞:(x, y)
w
h
(x < cx < x+w)
和(y-r < cy < y+h+r)
(y < cy < y+h)
和(x-r < cx < x+w+r)
- 矩形任意角与 之间的距离
(cx, cy)
小于r
。
正如我在评论中所说,圆之间的碰撞更容易,因为您只需检查中心之间的距离是否小于半径之和。
对于非轴对齐的矩形,解决方案有点复杂。给定矩形的四个顶点(A、B、C、D);如果以下任何一项为真,则发生碰撞:
(x < cx < x+w)
和(y < cy < y+h)
intersectCircle(A, B, cx, cy, r)
intersectCircle(B, C, cx, cy, r)
intersectCircle(C, D, cx, cy, r)
intersectCircle(D, A, cx, cy, r)
该函数的伪代码intersectCircle
是这样的:
intersectCircle(P1, P2, a, b, r):
x1, y1 = P1
x2, y1 = P2
p = abs((x1-x2)*(a-x1)+(y2-y1)*(b-y1))
q = sqrt((x1-x2)^2 + (y1-y2)^2)
return r > p/q
这个函数是基于这个数学答案的公式,这是迄今为止我发现的最简单的一个。