还有另一种方法:通过采样点找到碰撞区域的质心。
创建以下函数:
bool IsPointInsideRectangle(Rectangle r, Point p);
将搜索矩形定义为:
TopLeft = (MIN(x), MAX(y))
TopRight = (MAX(x), MAX(y))
LowerLeft = (MIN(x), MIN(y))
LowerRight = (MAX(x), MIN(y))
其中 x 和 y 是两个矩形的坐标。
您现在将定义一个像网格一样划分搜索区域的步骤。我建议您使用 AVG(W,H)/2 ,其中 W 和 H 是搜索区域的宽度和高度。
然后,如果每个网格点位于碰撞区域内,则迭代网格点:
IsPointInsideRectangle(rectangle1, point) AND IsPointInsideRectangle(rectangle2, point)
定义:
Xi : the ith partition of the mesh in X axis.
CXi: the count of mesh points that are inside the collision area for Xi.
然后:

你也可以对 Y 做同样的事情。这是这种方法的一个说明性示例:
