AABB重叠判定有三种方法:一、分离轴检测法,检查x、y轴投影是否同时不分离;二、中心-半宽高法,比较中心距与半尺寸和;三、边界包含法,计算区间交集是否非空。

如果您需要在 C++ 中判断两个轴对齐包围盒(AABB)矩形是否发生重叠,则通常基于它们在 x 轴和 y 轴上的投影是否同时存在交集。以下是实现该判定的多种坐标判定方法:
一、分离轴检测法(标准二维投影判定)
该方法基于分离轴定理:若两个凸物体在某条轴上的投影不重叠,则二者不相交。对 AABB 而言,只需检查 x 轴与 y 轴两个方向即可。
1、获取第一个矩形的最小 x 坐标 minX1 和最大 x 坐标 maxX1,以及最小 y 坐标 minY1 和最大 y 坐标 maxY1。
2、获取第二个矩形的最小 x 坐标 minX2 和最大 x 坐标 maxX2,以及最小 y 坐标 minY2 和最大 y 坐标 maxY2。
3、判断 x 轴投影是否分离:若 maxX1 ,则无碰撞。
4、判断 y 轴投影是否分离:若 maxY1 ,则无碰撞。
5、若 x 与 y 方向均未分离,则返回 true,表示发生碰撞。
二、中心-半宽高判定法(相对坐标偏移形式)
该方法将每个 AABB 表示为中心点加半宽高,通过计算中心点距离与半尺寸之和的关系进行判定,数值稳定性更优,适合浮点运算。
1、计算矩形 A 的中心点 centerA.x = (minX1 + maxX1) * 0.5f,centerA.y = (minY1 + maxY1) * 0.5f;半宽 halfWidthA = (maxX1 - minX1) * 0.5f,半高 halfHeightA = (maxY1 - minY1) * 0.5f。
2、同理计算矩形 B 的 centerB.x、centerB.y、halfWidthB、halfHeightB。
3、计算中心点 x 方向距离绝对值:dx = fabs(centerA.x - centerB.x)。
4、计算中心点 y 方向距离绝对值:dy = fabs(centerA.y - centerB.y)。
5、判定条件为:dx ,满足则碰撞成立。
三、边界包含式判定法(显式区间交集检查)
该方法直接构造两个矩形在 x、y 轴上的闭区间,并利用区间交集定义判断是否存在公共子区间。
1、构造 x 区间交集左端点:xOverlapMin = fmaxf(minX1, minX2)。
2、构造 x 区间交集右端点:xOverlapMax = fminf(maxX1, maxX2)。
3、构造 y 区间交集下端点:yOverlapMin = fmaxf(minY1, minY2)。
4、构造 y 区间交集上端点:yOverlapMax = fminf(maxY1, maxY2)。
5、判定交集非空:xOverlapMin 。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











