📜  rect to rect 碰撞 - Javascript (1)

📅  最后修改于: 2023-12-03 15:19:46.900000             🧑  作者: Mango

相关概念

在编程语言中,矩形(rectangle)是一个很重要的概念。一个矩形就是由四条直角的线段组成的四边形。

在计算机图形学中,矩形碰撞(rectangle collision)是指当两个矩形重叠部分的宽度和高度都大于0时触发的一种事件。

碰撞检测

检测两个矩形是否相交可以采用以下方法:

  1. 比较矩形四个顶点的位置关系
  2. 比较矩形的边缘是否相交
  3. 将矩形投射到坐标轴上,判断在x轴和y轴上的投影是否有重叠部分

其中较为常用的是第三种方法,即SAT分离轴定理(Separating Axis Theorem)。

SAT分离轴定理

SAT分离轴定理是运用到平面几何中形体的投影相关知识,通过判断两个形体在每个轴上的投影是否重叠,来确定它们是否相交。

对于一个矩形,可以沿x轴和y轴分别投影,判断投影在轴上的长度是否有重叠部分。

function rectCollision(rect1, rect2) {
  const l1 = rect1.x - rect1.width/2;
  const r1 = rect1.x + rect1.width/2;
  const t1 = rect1.y - rect1.height/2;
  const b1 = rect1.y + rect1.height/2;

  const l2 = rect2.x - rect2.width/2;
  const r2 = rect2.x + rect2.width/2;
  const t2 = rect2.y - rect2.height/2;
  const b2 = rect2.y + rect2.height/2;

  if (l1 > r2 || l2 > r1 || t1 > b2 || t2 > b1) {
    return false;
  }

  return true;
}

以上代码就是一个简单的碰撞检测函数,用于判断两个矩形是否相交。

总结

矩形碰撞检测是2D游戏和动画开发中的一个基本操作,采用SAT分离轴定理可以较为准确地判断两个矩形是否相交。以上代码只是一个简单的实现,如果在实际项目中需要高效且精确的检测,需要综合考虑各种情况进行算法的优化。