如何预先计算台球(池)游戏中的轨迹?

台球中的大多数碰撞检测算法使用天真的approch,其中球的位置递增,然后检查碰撞。当速度非常高时,这种方法效果不佳,因为我们可能会“跳过”碰撞。 我一直在寻找一种在台球比赛中预先计算球的轨迹的方法。一旦知道了轨迹,我就可以对球进行动画处理,直到它们停止移动为止。而且我不必担心速度,因为碰撞是在数学上被检测和解决的。 你知道是否有人这样做过吗?我不想重新发明轮子。 谢谢。     
已邀请:
从四叉树开始,使采样间隔更小。但是,如果你的台球移动得如此之快以至于它们穿过其他球,你就会错误地模拟游戏。你有没有打过一场台球比赛,球在那里快速移动? 另外 在您的时间步长之间,将球的先前位置和当前位置建模为二维圆柱体。如果任何两个气缸发生碰撞,请将时间步长缩小,然后重试。通过这种方式,您可以获得非常快速的一般计算,并且您仍然可以处理超高速度。     
简单的方法是使用非常精细步长的“天真”方法,但实际上并没有动画球。     
我为类似的东西实现的一个解决方案是使用可变时间步骤。 实现类似于:你有一个时间参数化的方法来确定球的位置(在当前时间T加上可变时间V);默认是指定V为1.0。在计算更新位置时,可以执行碰撞检测;碰撞检测的自然伪影是碰撞发生时的分数指示。如果发生这种情况,请重置当前迭代的位置,然后使用小数V重新提交所有移动,然后迭代1.0 - V. 这非常好用,并且具有相对简单的实现方式。一个值得关注的问题是,您需要足够的CPU功率才能在“自然”时间片(即一个显示帧等)期间多次计算移动。但是,由于这种类型的计算对于现代处理器来说非常容易,因此这应该不是问题。     
多年前我做了类似的事情,并描述了球位置随时间变化的运动。使用这种方法,我能够找到任何两个球的确切交叉时间。每个球保持一个优先级队列,队列头部的交叉时间最短,并且在发生碰撞时将调整队列。这非常有效,第一次传球非常容易,球没有了。后来(有一些更难的数学)我也能够扩展它以添加摩擦力。 这种方法的主要缺点是计算倾向于一次性发生,然后暂时不发生,而不是每帧都能做一点工作。这意味着您的帧率将不稳定。它在8年前运行的硬件上没有引起任何明显的故障。即使在休息时间,或者奇怪的或多或少不可能的情况,例如几个球在他们撞到墙壁时完全接触并朝同一方向移动时,这将是帧率的下降,但不是任何明显的。     

要回复问题请先登录注册