python - SAT 最小翻译向量不正确

标签 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]

最佳答案

根据此博客链接:Collision Detection Using the Separating Axis Theorem ,如果您计算每个三角形的所有 3 条法线,则 SAT 在三角形上运行良好。我在你的代码中没有看到这一点。我认为您可能在您的 SAT 版本中实现了一些无效的捷径。

关于python - SAT 最小翻译向量不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35016854/

相关文章:

python - 我可以在单个 heroku (python) dyno 中运行多个线程吗?

python - 为什么我可以将实例方法传递给 multiprocessing.Process,而不是 multiprocessing.Pool?

python - 在 CentOS 7 上使用 Tensorflow 的零星核心转储(段错误、非法指令)

python - PyGame 应用程序中的 SVG 渲染。在 Pygame 2.0 之前,Pygame 不支持 SVG。那你是怎么加载的?

python - Pygame 组更新不带参数

python - 为什么 pygame 上两个移动物体之间的碰撞不起作用?

c++ - 游戏碰撞处理

python - python中多处理,异步和concurrency.futures之间的区别

python - 在 Mac (Catalina) 上安装 PyGame 时出错

java - 查找等距实体的足迹