当前位置:  开发笔记 > 人工智能 > 正文

计算一段时间后加速体的位置

如何解决《计算一段时间后加速体的位置》经验,为你挑选了2个好方法。

如何在一定时间(例如1秒)后计算加速体(例如汽车)的位置?

对于一个没有加速的移动体,它是一个线性关系,所以我认为它是一个加速的身体,它涉及一个方形的某个地方.

有任何想法吗?



1> Chris Johnso..:

等式为:s = ut +(1/2)at ^ 2

其中s是位置,u是t = 0时的速度,t是时间,a是恒定加速度.

例如,如果汽车开始静止,并以3m/s ^ 2的加速度加速两秒,则移动(1/2)*3*2 ^ 2 = 6m

这个等式来自于分析积分方程,表明速度是位置的变化率,加速度是速度的变化率.

通常在游戏编程情况下,人们会使用稍微不同的公式:在每一帧,速度和位置的变量都不是通过分析整合,而是数字地整合:

s = s + u * dt;
u = u + a * dt;

其中dt是帧的长度(使用定时器测量:1/60秒左右).该方法的优点是加速度可以随时间变化.

编辑有几个人已经注意到,数值积分的欧拉方法(如此处所示)虽然最简单,但具有相当差的精度.参见Velocity Verlet(常用于游戏)和4阶Runge Kutta(科学应用的"标准"方法),用于改进算法.


如果使用此方法,您将首先更新u,然后是s(即使用新计算的速度来获取位置,遵循逻辑加速度=> velocity =>位置推导路径).
对于2D游戏,您必须同时为x和y(替换s)执行此操作,同时了解x和y方向上的速度和加速度.添加z用于3D物理.

2> freespace..:

那么,这取决于加速度是否恒定.如果它是简单的

s = ut+1/2 at^2

如果a不是常数,则需要进行数值积分.现在有各种各样的方法,他们都不会为了准确而手动这样做,因为它们都是最近的近似解决方案.

最简单和最不准确的是欧拉的方法.在这里,您将时间划分为称为时间步长的离散块,然后执行

v[n] = v[n-1] * t * a[t]

n是索引,t是时间步长.职位同样更新.这对于准确性不是那么重要的情况来说真的很好.Euler方法的一个特殊版本将产生射弹运动的精确解决方案(参见wiki),因此虽然这种方法很粗糙,但对于某些情况来说它可能是完美的.

游戏和一些化学模拟中最常用的数值积分方法是Velocity Verlet,它是更通用的Verlet方法的一种特殊形式.如果欧拉太粗糙,我会推荐这个.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有