gpt4 book ai didi

c++ - 有没有更优雅/更聪明/更简洁的方法让未知数更接近 0?

转载 作者:太空狗 更新时间:2023-10-29 19:48:53 25 4
gpt4 key购买 nike

基本上我是在一个物理游戏中计算阻力。侧向运动需要减少(如接近 0,而不仅仅是负数),但我不知道它在哪个方向行进,所以我不知道是增加阻力还是减去阻力。

(如果一个项目向右移动,它有正向力,向左移动,负向力)

现在我正在这样做:

if (objects[i]->force.x > 0)
objects[i]->force.x -= drag;
else
objects[i]->force.x += drag;

这很好用,但我觉得一定有更流畅的方法来做到这一点。

找到一种方法来确保它不会超过 0 也没什么坏处

最佳答案

如果您尝试模拟摩擦,最简单的方法是了解速度并使用数学模型或微分方程对其进行近似。

     dx
-c * --
dt

基本上,摩擦力与速度成正比,方向相反。因此,您可以简单地计算摩擦力(或阻力),如下所示:

objects[i]->force = -drag_coefficient * objects[i]->velocity

如果您不知道速度,就很难得到好的结果,因为您可能有一个力向右推,而物体向左移动(因此您会向错误的方向施加阻力)。

编辑:

其实,并不是所有的摩擦力都取决于速度的大小(速度)干摩擦力常被称为只是取速度的方向考虑速度:

force = -drag_coefficient * sign(velocity)

然而,在计算上,当速度达到 0 时,这会变得不稳定,超过它并来回振荡。

另一种模型是用于湿摩擦的模型,即我在第一个示例中使用的模型:

force = -drag_coefficient * velocity

这意味着当你的物体运行得更快时,它会因摩擦而减慢更多。想一想空气的力量,当你运行时,你跑得越快,空气就越想减慢你的速度。

上述模型都不是 100% 准确的,但对于游戏来说它们应该绰绰有余

关于c++ - 有没有更优雅/更聪明/更简洁的方法让未知数更接近 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16484680/

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