分离轴定理MVT仅沿一个轴

时间:2016-09-15 10:44:31

标签: collision separating-axis-theorem

我无法沿一个轴计算3D穿透矢量。我已经实现了SAT并且它有效。我想计算我需要将第一个盒子与其他盒子相互抵消,以便它始终位于其他盒子之上。用很长的盒子做一个简单的盒子。

我应该如何继续寻找将一个物体推向指定轴方向的偏移量。

enter image description here

1 个答案:

答案 0 :(得分:1)

你应该已经知道了第一部分;当你将每个形状投影到每个轴上时,形状A应该有一些最小和最大标量值,比方说AMINAMAX,形状B(BMIN / { {1}})。

如果对象明显在轴上发生碰撞,则它们的投影会重叠,这意味着BMAXAMIN < BMIN < AMAX < BMAX。让我们假设第一个。

BMIN < AMIN < BMAX < AMAX的值是移动任一形状以使其触碰接触所需的距离,正在测试的轴为您提供方向。

通常,当一个遍历所有轴时,一个跟踪最小值及其对应的轴,并且这将成为解除形状所需的向量。 (如果你想谷歌,通常称为“最小位移矢量”。)

对于你,想要在特定的方向上移动它们,你只需存储与该特定轴相对应的值,然后它就成为你的位移矢量(然后将其添加到一个形状的位置以将它们分开)。

我强烈推荐使用Google搜索“最小位移矢量坐标”并检查前几个链接,特别是这一个:http://www.dyn4j.org/2010/01/sat/。它有点密集,但它是我学习SAT所知的一切。

编辑和...我错过了一块。这有点粗糙,但如果您想要沿一个轴(在您的示例中为垂直)替换形状,基于从另一个轴(底部框的长边的法线)获得的位移矢量,您需要将位移矢量投影到所需(标准化)轴(使用点积)以获得适当的距离,然后与您想要的轴组合。