- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
基本上我是在一个物理游戏中计算阻力。侧向运动需要减少(如接近 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/
我正在尝试切换(某种)命令。 if 'Who' in line.split()[:3]: Who(line) elif 'Where' in line.split()[:3]: W
基本上我是在一个物理游戏中计算阻力。侧向运动需要减少(如接近 0,而不仅仅是负数),但我不知道它在哪个方向行进,所以我不知道是增加阻力还是减去阻力。 (如果一个项目向右移动,它有正向力,向左移动,负向
我有以下表格 CREATE TABLE Foos ( [Id] INT IDENTITY, -- Other fields ) CREATE TABLE Boos ( [Id]
我正在运行一个非常简单的程序 static void Main(string[] args) { Console.WriteLine(Get4S());
PHP $total_points = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM account WHERE id='$id'"),0
我是一名优秀的程序员,十分优秀!