SAT最小翻译向量不正确

时间:2016-01-26 14:58:17

标签: python pygame collision-detection separating-axis-theorem

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]

1 个答案:

答案 0 :(得分:1)

根据此博客链接:Collision Detection Using the Separating Axis Theorem,如果您计算每个三角形的所有3个法线,SAT在三角形上工作正常。我在你的代码中看不到这一点。我想你可能已经在你的SAT版本中实现了一些无效的捷径。