gpt4 book ai didi

java - 为什么在施加重力时我的球速度最终停止下降?

转载 作者:行者123 更新时间:2023-11-30 12:06:21 25 4
gpt4 key购买 nike

当对我的球对象速度施加重力时,它首先会按预期运行,在下落时加速,产生一半速度的摩擦力,然后反转速度。问题是最终速度似乎达到了停止下降的程度,球开始在地板上轻微地上下跳跃。

下面的代码代表了我对球施加重力的过程。

double y        = 100;
double vel = -10;
double gravity = -1;
double friction = 0.5;

while(true) {
y += vel;

//if collides with floor
if(y < 0) {
y = 0;
vel *= -1;
vel *= friction;
}

else
vel += gravity;
}

在这个特定的例子中,速度最终开始从 -1.3333...0.666...和 ​​-0.333...来回反弹

我的目标是让球在地板上弹跳,每次弹跳时速度都会降低,直到它最终达到速度 0 并停在地板上。

最佳答案

代码中存在一个问题...在某些弹跳之后...球的最大高度超出了之前的最大高度。这显然违反了物理学。就像你放一个 y<0检查以避免让 y去消极的一面,你应该放一个y>prevMaxY不允许高度超过之前的最大值。

else if(y > maxY) {
y = maxY;
vel *= -1;
vel *= friction;
}

为此,您必须跟踪之前的最大高度。

此外,作为终止条件,您应该在 y 上设置一个阈值这意味着 - if max height is less than the threshold then the ball has come to rest .

不过,您的近似值/假设非常粗糙。您可能会考虑改进它们。

关于java - 为什么在施加重力时我的球速度最终停止下降?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55618404/

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