我正在实施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
的框。但我不知道如何计算它的顶角或左角。
答案 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/edit