如何通过坐标判定识别AABB轴对齐矩形碰撞情况?

2026-05-20 13:090阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1134个文字,预计阅读时间需要5分钟。

如何通过坐标判定识别AABB轴对齐矩形碰撞情况?

两个AABB不相交,当且仅当它们在x轴或y轴上完全分离。这是最直接、最高效的确定方法,无需开方、三角函数或向量运算。

核心逻辑就是:只要有一个方向(x或y)上两矩形的投影不重叠,就一定没碰撞;只有x和y两个方向都重叠,才算发生碰撞。

常见错误是写成 if (overlapX && overlapY) return true; 却把重叠条件写反,比如用 min1 > max2 判分离却漏掉等于号——AABB边界接触也算碰撞,所以必须用严格不等号判断“分离”。

实操建议:

立即学习“C++免费学习笔记(深入)”;

  • 统一用左下角 min 和右上角 max 表示AABB(即 min.x , <code>min.y ),避免中心+半宽高带来的符号混淆
  • 分离条件写为:rect1.max.x = rect2.max.x || rect1.max.y = rect2.max.y
  • 反过来,碰撞条件就是上述表达式的逻辑非,可直接返回 !separated,更易读且不易出错

注意坐标系与Y轴方向的影响

很多图形API(如OpenGL、SDL)的Y轴向上,而窗口坐标系(Win32、DirectX默认)Y轴向下。如果混用不同来源的AABB数据,min.ymax.y 可能被颠倒,导致碰撞永远不触发或永远触发。

阅读全文
标签:C

本文共计1134个文字,预计阅读时间需要5分钟。

如何通过坐标判定识别AABB轴对齐矩形碰撞情况?

两个AABB不相交,当且仅当它们在x轴或y轴上完全分离。这是最直接、最高效的确定方法,无需开方、三角函数或向量运算。

核心逻辑就是:只要有一个方向(x或y)上两矩形的投影不重叠,就一定没碰撞;只有x和y两个方向都重叠,才算发生碰撞。

常见错误是写成 if (overlapX && overlapY) return true; 却把重叠条件写反,比如用 min1 > max2 判分离却漏掉等于号——AABB边界接触也算碰撞,所以必须用严格不等号判断“分离”。

实操建议:

立即学习“C++免费学习笔记(深入)”;

  • 统一用左下角 min 和右上角 max 表示AABB(即 min.x , <code>min.y ),避免中心+半宽高带来的符号混淆
  • 分离条件写为:rect1.max.x = rect2.max.x || rect1.max.y = rect2.max.y
  • 反过来,碰撞条件就是上述表达式的逻辑非,可直接返回 !separated,更易读且不易出错

注意坐标系与Y轴方向的影响

很多图形API(如OpenGL、SDL)的Y轴向上,而窗口坐标系(Win32、DirectX默认)Y轴向下。如果混用不同来源的AABB数据,min.ymax.y 可能被颠倒,导致碰撞永远不触发或永远触发。

阅读全文
标签:C