gpt4 book ai didi

math - 打砖 block 物理(射弹物理模拟)

转载 作者:行者123 更新时间:2023-12-02 18:20:46 29 4
gpt4 key购买 nike

我有一个 slider ,我通过每个刻度之间的位置差异来计算其速度(由于通过触摸屏使用它,有时可能会很大,所以也许我应该将其限制在某个任意数字以避免其中一些问题?)

我有一个具有 3 维方向向量和速​​度的球。

当球与 slider 碰撞时,我会反转其在 Z 轴上的方向(远离 slider ),然后使用 slider 速度来操纵其 X(左 <-> 右)方向。所以:

ball.direction.x += (slider_friction * slider_velocity)

现在球的更新进行如下:

velocity = ball.velocity * time
ball.direction.normalise()
ball.position = ball.direction * ball.velocity

这似乎工作得很好,除了在某些情况下,任何球轴似乎很可能等于零,导致在某些情况下它永远不会返回到 slider 。对此有什么好的解决方案吗?当 block 与 block 碰撞时,处理 block 响应的好方法是什么?它应该返回到以直角弹跳,还是应该使用 slider 应用的相同弹跳修改器保持反射?此外,对于这种射弹模拟的任何其他物理技巧也将不胜感激。

最佳答案

嗯,这是一个很好的问题;问题是,一个好的解决方案(即,看起来和感觉起来都像真实物理的解决方案)本质上是使用真实物理的解决方案。幸运的是,这个问题中的大部分牛顿物理学都可以很容易地简化。如果我说得过于冗长,请原谅我,但物理学往往会这样对你。

enter image description here

因此,为了定义问题,这是打砖 block 球和桨之间的弹性(即,没有吸收能量)碰撞。首先,既然你显然已经把垂直运动降低了,我不会关心这个。因此,接下来的内容都是关于碰撞的水平分量。

Racket 将一定量的水平动量传递给球(尽管,由于这是打砖 block 物理, Racket 本身不会损失动量:P)。这可以通过两种方式实现——使球旋转,以及给球一些水平动量(显然,如果球已经具有水平动量或旋转,则增加的动量将......好吧,添加)。

δ动量 + δ角动量 = 动量桨给出

当然,使用动量可能会很烦人,因为您实际上不必这样做。我假设球和桨具有恒定的质量(也就是说,球不会突然变重,尽管您可以轻松地使用它),因为这样您就可以将每个球的质量从动量方程中分解出来。那么,

水平速度增量 + 角速度增量 = 桨速度 * 桨质量/球质量

要得出一个可以使用的方程式,您必须设置 Racket 的动量有多少会进入旋转,以及有多少动量会进入球运动。例如,

mass_factor = 2 # ratio between paddle and ball masses
angular_factor = 0.3 # the amount of the paddle's movement which will go into the ball's spin

# and now for the bouncy-bouncy

ball.hVel += (1 - angular_factor) * paddle.hVel * mass_factor * friction or whatever
ball.spin += angular_factor * paddle.hVel * mass_factor * friction or whatever
ball.vVel = - ball.vVel # of course, its vertical velocity reverses

这足以建立一个准现实的反弹,但仍然存在一个金 block (你不需要解决这个问题,但解决它会让你的打砖 block 变得惊人)——所有的旋转会发生什么?旋转可以以某种方式用于更有趣的弹跳吗?

所以,回顾一下,你的旋转是球的外围相对于中心移动的速度。事实是,每当一个旋转的球撞到静止的物体时,它的旋转和速度都会发生变化。如果旋转的球击中静止表面,球会在与其旋转方向相反的方向上受到一点“踢”(如果在接触点测量旋转),并且旋转将会改变。

#Upon collision with a surface (assumed horizontal, with the ball above the surface)
ball.hVel += -(ball.Avel * rate) # Where "rate" is the ratio which determines how much angular velocity decays with each bounce
ball.Avel *= 1 - rate # So the angular velocity decays properly

由于角速度是旋转对称的,因此您只需将不同角度的碰撞(墙壁上的球、天花板上的球)视为其旋转。

唷,这无意中啰嗦了,而且还远未完成,但恕我直言,这足以回答你的问题了。

关于math - 打砖 block 物理(射弹物理模拟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8063696/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com