【发布时间】:2021-12-10 18:10:55
【问题描述】:
所以基本上我是在 C++ 上制作一个台球游戏(有点)。在我开始编码之前,我仍在思考这个理论以及如何准确地实现它,我有点卡住了。因此,给定了球的起始坐标,并输入了射门的力量和射门方向的坐标。
例子:
> Ball: (280,70)
Input:
> 2(power) 230(x) 110(y)
Output:
> 180(x) 150(y)
幂意味着基本上它会走 X * 给定坐标的距离。因此,如果它是 1,它只会达到 230 110,但如果它更多,它将成为该距离的两倍、三倍、四倍等。 (应忽略外部因素 - 摩擦等)
到现在为止,我已经成功地创建了一个算法来找到球将要经过的路线。但我不知道球会停在这条线的哪一点。任何帮助将不胜感激!
还有一件事,我还需要计算如果撞到台球桌的墙壁会去哪里(台球桌是一个 2:1 的矩形,具有给定的边缘坐标),我还设法找到了它将行进的路线,但不是它将停止的确切点。
TL;DR 我需要找到台球将停在的行进线点。
【问题讨论】:
-
在您的无摩擦世界中,一个台球(没有旋转)会一直移动,直到它遇到(击中)另一个物体,例如保险杠、另一个球或口袋。你投入球的力量(力量)意味着它会在更短的时间内击中目标。没有摩擦,所以没有什么可以减慢球的速度。物理学,我的朋友,物理学。
-
是的,这是真的。但在这种情况下,就像球通过在线移动到达给定坐标,如果幂为 1,它会停止,但如果它更多,它会在同一条线上继续相同的距离 X(power) 次。
-
如果我们将其简化为 2D 视图,则 Cue(一条线段)与一个圆接触。 Cue 有大小和方向(向量的物理定义)。由于您很简单,所以圆的方向就是线段“撞击”圆的方向。幅度将应用于圆。更多物理学。
-
球失去能量(并因此减速)的两种方式是摩擦和非弹性碰撞。如果您不想明确模拟摩擦,那么您可以通过让球的速度从与您的“功率”成比例的某个值开始,然后随着移动距离减小(线性、二次等)来伪造它。
-
@CoryKramer 不错
标签: c++ game-physics billiards