如何计算两个AABB之间的Minkowski差异(没有矢量数学)?

时间:2012-11-21 23:36:49

标签: math language-agnostic geometry collision-detection

我正在实施second version of my collision detection library。这个特殊的库应该处理轴对齐的框(AABB)。我想在这个版本上开始跟踪快速移动的盒子。我认为计算两者之间的Minkowski差异将是一个很好的起点。

当我说Minkowsky差异时,我的意思是Collision detection for Dummies中描述的几何操作。

问题是:那里描述的过程和算法非常通用。它使用相当高级的矢量数学来计算任意两个多边形的MD。

就我而言,我有AABB。鉴于它们的数字简单性,到目前为止库还没有需要Vector概念 - 例如,我不需要计算单点产品。如果可能的话,我希望它保持这种状态。

所以我的问题是:

根据它们的顶部,左侧,宽度和高度({t1,l1,w1,h1}{t2,l2,w2,h2})给出两个AABB,如何计算它们的MD,(如果可能,不进行矢量数学运算)?

只需在傻瓜碰撞检测中使用小部件,我几乎可以肯定MD宽度将是一个宽度为w1+w2和高度为h1+h2的框。但我不知道如何计算它的顶角或左角。

1 个答案:

答案 0 :(得分:29)

两个轴对齐的矩形{t1,l1,w1,h1}和{t2,l2,w2,h2}的Minkowski差异本身就是一个轴对齐的矩形:

l = l1 - l2 - w2
t = t2 - t1 - h1
w = w1 + w2
h = h1 + h2

以下是一个简短的JavaScript演示,以显示此操作。您可以拖动两个矩形中的任何一个。它们会在重叠时改变颜色

演示:http://jsbin.com/afojes/2/

代码:http://jsbin.com/afojes/2/edit

No collision

Collision detected