2

SAT的最低翻译向量在所有情况下总是正确和准确吗? 我通过迭代所有可能的轴来计算它,并检查每个轴上的重叠,然后跟踪哪个轴具有最短重叠并将其用作穿透矢量。SAT最低翻译向量不正确

正如你可以看到,一些计算的最小平移向量并不总是正确的。

在这短短的提取物,我觉得渗透载体,我想你们帮我发现什么是错的:

 direction = Vector.Sub(me.Verts[k-1], me.Verts[k]) 
     axis  = Vector.Normalize(Vector.Perp(direction)) 

     min_1, max_1 = Vector.Project(me, axis) 
     min_2, max_2 = Vector.Project(ent, axis) 

     if (max_1 < min_2 or max_2 < min_1) == False: 
      if ((max_2 - min_1) or (max_1 - min_2)) < first_separation[0]: 
       if max_2 - min_1 < max_1 - min_2: 
        first_separation = [max_2 - min_1, axis] 
       else: 
        first_separation = [max_1 - min_2, axis] 

在其他地方,我用下面的代码行,让我的矢量值:

separator, axis = first_separation 
vec = [axis[0] * (separator * -1), axis[1] * separator * -1] 
+0

'print()'查看哪一个不正确。 – furas

+0

@furas,这个问题不在计算中,因为在大多数情况下,碰撞反应很好,但是当你处理三角形等形状时,碰撞是不正确的。 – HDalton

回答

1

根据此博客链接:Collision Detection Using the Separating Axis Theorem,国家税务总局工作正常的三角形,如果你计算每个三角形的所有3个法线。我没有看到你的代码。我认为你可能在你的SAT版本中实施了一些无效的捷径。

+0

对不起,但上面的代码没有画出完整的画面。我有一个循环遍历给定三角形的所有顶点,然后使用上面的代码计算每个边的法线。 – HDalton