Python SAT最小平移向量为';不正确

Python SAT最小平移向量为';不正确,python,pygame,collision-detection,separating-axis-theorem,Python,Pygame,Collision Detection,Separating Axis Theorem,SAT的最小平移向量在所有情况下都是正确和精确的吗? 我通过迭代所有可能的轴来计算它,并检查每个轴上的重叠,然后跟踪哪个轴的重叠最短,并将其用作穿透向量 如您所见,最小平移向量的某些计算并不总是正确的 在这篇简短的摘录中,我找到了渗透向量,我希望你们能帮助我发现问题所在: direction = Vector.Sub(me.Verts[k-1], me.Verts[k]) axis = Vector.Normalize(Vector.Perp(dire

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]

根据这个博客链接:,如果你计算每个三角形的所有3条法线,SAT在三角形上的效果很好。我在你的代码中看不到这一点。我认为您可能在您的SAT版本中实施了一些无效的捷径。

print()
所有计算,以查看哪一个是错误的。@furas,好吧,问题不在于计算,因为在大多数情况下,碰撞反应很好,但当您处理三角形等形状时,冲突不正确。很抱歉造成混淆,但上面的代码并不能描述全部情况。我有一个for循环,它迭代给定三角形的所有顶点,然后使用上面的代码计算每边的法线。
separator, axis = first_separation
vec = [axis[0] * (separator * -1), axis[1] * separator * -1]