Pygame浮点精度碰撞检测

2024-05-26 17:43:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在建立一个物理模拟,并想做一个pygame可视化。 对于位置和速度计算,我使用Vector2,这非常有效。 这将有助于使用内置的矩形碰撞检测。不幸的是,我必须先将矩形的当前位置四舍五入到一个像素。因为在我的模拟中1像素被设置为1米,所以我只能确定1米以内的物理碰撞。有人知道我如何解决这个问题吗?我唯一的想法是将1米的刻度改为10像素,以获得10厘米的精度,但这样我只能以1000像素显示100米。也许有人知道一个很好的解决办法!谢谢你的帮助


Tags: 可视化物理精度像素pygame内置速度矩形
1条回答
网友
1楼 · 发布于 2024-05-26 17:43:10

如果代码用于解决模拟,则应将模拟与可视化分开。因为现在您遇到了这样一个事实,由于可视化问题,您必须限制您的模拟。情况不应该如此

我的建议是使用numpy和scipy的组合来运行模拟,而不使用pygame(甚至pygame中的Vector2或Rect)。如果需要在模拟中检测碰撞,可以自己快速实现矩形碰撞:

class Rectangle(object):
    def __init__(self, left, bottom, width, height):
        self.left = left
        self.bottom = bottom
        self.width = width
        self.height = height

    @property
    def right(self):
        return self.left + self.width

    @property
    def top(self):
        return self.bottom + self.height

    def collide_with_rectangle(self, other):
        if self.left > other.right or self.right < other.left or self.bottom > other.top or self.top < other.top:
            return False
        return True

这种方法的优点是,可以将可视化与模拟逻辑分离。例如,如果您认识到pygame不适合您的需要,您可以非常轻松地切换到matplotlib或任何其他框架

分离模拟逻辑后,可以轻松缩放可视化。因为从模拟中获取所有点并乘以可视化/缩放因子

相关问题 更多 >

    热门问题