描述
有这样的结构:
/**
* Координата в плоскости
*/
interface Poind2D {
x: Number;
y: Number;
}
/**
* Вектор в плоскости
*/
interface Vector2D {
begin: Poind2D;
end: Poind2D;
}
/**
* Объект с границами
*/
class Subject {
collider: Vector2D;
}
然后我有 2 个Subject 类的实例。
const subject1 = new Subject();
const subject2 = new Subject();
在视觉上它可以这样表示:
也就是说,我们确定Subject的属性collider.begin
是左下角的坐标和collider.end
右上角的坐标。但我们不知道这些科目中哪个在哪里,哪个在左边,哪个更高......
问题
检查这些对象之间是否发生碰撞的最佳方法是什么?
碰撞是指矩形相交或接触(如图所示)。一个矩形位于另一个矩形内不被视为碰撞。
矩形的交集存在以下坐标关系:
但案件
Один прямоугольник в другом
需要单独核实这
~~(boolean)
会将比较结果返回为 0 或 1,并检查四个结果是否都相同。我没有什么可以检查 JS 代码,所以这是推测性的。如果某些坐标重合,则有一些微妙之处 - 我不知道这是否会打扰您(如果是这样,则单独检查a в b
和b в a
)还有这样一点——当创建一个移动物体的系统时,通常最好不要通过每毫秒计数许多对来确定碰撞的事实,而是预先计算物体发生碰撞的时间,并据此进行计算。 ,改变方向。
如果这些是向量,那么您可以比较这些向量的四分之一。为此,请计算路径->矢量坐标。
伪代码示例。
入口:
算法:
出口: