给出一个圆圈列表,其坐标(x和y)每秒在不同的方向上移动(东南,西南,东北和西北),圆圈将改变方向,如果它撞墙有点像弹跳,所以我们如何检测它们是否相互碰撞或重叠?我不确定我们是否可以使用像Binary Search Tree
这样的数据结构,因为所有坐标每秒都会变化,所以树必须相应地重新构建。或者我们每次都可以使用Vertical Sweep Line Algorithm吗?关于如何以有效的方式做到这一点的任何想法?
答案 0 :(得分:3)
你的形状只是圆圈,所以:
假设您的矩形的边界在水平轴上为X1
和X2
,在垂直轴上为Y1
和Y2
(X1 < X2
和{{1 }})。在第一种情况下,如果您的圈子的中心为Y1 < Y2
且其半径为(x, y)
,则必须检查是否:
r
?x-r < X1
?x+r > X2
?y-r < Y1
?如果其中任何一个为真,则您的圆圈会触及矩形的边界。
在第二种情况下,假设您的圈子分别由y+r > Y2
和(x1, y1, r1)
定义。你必须检查(x2, y2, r2)
。如果这是真的,那么你的圈子会相互接触。
答案 1 :(得分:0)
鉴于提供的假设:
您可以实现以下简单算法:
RectangleWall
。RectangleWall
中,添加一个名为public boolean isPointInside(Point pt)
的公共成员函数(或签名可以是(int x, int y)
)并添加逻辑以检查传入的点是否属于矩形:这对你来说应该很简单;)