2024-05-26 17:43:10 发布
网友
我正在建立一个物理模拟,并想做一个pygame可视化。 对于位置和速度计算,我使用Vector2,这非常有效。 这将有助于使用内置的矩形碰撞检测。不幸的是,我必须先将矩形的当前位置四舍五入到一个像素。因为在我的模拟中1像素被设置为1米,所以我只能确定1米以内的物理碰撞。有人知道我如何解决这个问题吗?我唯一的想法是将1米的刻度改为10像素,以获得10厘米的精度,但这样我只能以1000像素显示100米。也许有人知道一个很好的解决办法!谢谢你的帮助
Vector2
如果代码用于解决模拟,则应将模拟与可视化分开。因为现在您遇到了这样一个事实,由于可视化问题,您必须限制您的模拟。情况不应该如此
我的建议是使用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或任何其他框架
分离模拟逻辑后,可以轻松缩放可视化。因为从模拟中获取所有点并乘以可视化/缩放因子
如果代码用于解决模拟,则应将模拟与可视化分开。因为现在您遇到了这样一个事实,由于可视化问题,您必须限制您的模拟。情况不应该如此
我的建议是使用numpy和scipy的组合来运行模拟,而不使用pygame(甚至pygame中的Vector2或Rect)。如果需要在模拟中检测碰撞,可以自己快速实现矩形碰撞:
这种方法的优点是,可以将可视化与模拟逻辑分离。例如,如果您认识到pygame不适合您的需要,您可以非常轻松地切换到matplotlib或任何其他框架
分离模拟逻辑后,可以轻松缩放可视化。因为从模拟中获取所有点并乘以可视化/缩放因子
相关问题 更多 >
编程相关推荐