如何根据现有的加速度/速度规则计算所需的加速度
How to calculate acceleration needed based on existing acceleration/velocity rules
我有3个值决定对象的移动:velocity
, acceleration
和maxVelocity
。我也有一个distance
值,决定他们离目标有多近(基本上是一个X)。这段代码运行每帧来确定基于3个值的实际移动:
var velocityDelta = (Math.max(Math.min(velocity + (acceleration * 0.016), maxVelocity), -maxVelocity) - velocity) / 2;
velocity += velocityDelta;
var delta = velocity*0.016;
velocity += velocityDelta;
distance -= delta;
如果velocityDelta
有点令人困惑的话它基本上是这样的:
velocityDelta = velocity + (acceleration * 0.016);
if (velocityDelta > maxVelocity) velocityDelta = maxVelocity;
else if (velocityDelta < -maxVelocity) velocityDelta = -maxVelocity;
velocityDelta = (velocityDelta - velocity) / 2;
现在,假设你只能改变acceleration
的值,是否有一种方法来计算你需要什么加速度,以确保distance
最终将恰好为0?意思是在上面代码运行的其中一个帧中,distance - delta == 0
。假设代码是这样的:
var distance = 300.5;
var velocity = 125.86;
var maxVelocity = 300;
while (distance != 0) {
acceleration = ?
var velocityDelta = (Math.max(Math.min(velocity + (acceleration * 0.016), maxVelocity), -maxVelocity) - velocity) / 2;
velocity += velocityDelta;
var delta = velocity*0.016;
velocity += velocityDelta;
distance -= delta;
}
你会把什么值放入acceleration
以确保循环不会永远运行?假设距离/速度/max可以是任何你不能改变的数字
你的问题是相当不足的。我认为最好的解决方案是减速(即在与速度相反的方向加速),这样maxVelocity
就不会成为问题。
首先,找出在物体到达目标之前有多少时间间隔(假设没有加速):
var dt = 0.016;
var jumps = distance/(dt * velocity); <-- round DOWN
然后应用一些基本的物理原理来让distance
在这段时间内旅行:
x = vt + at^2/2
a = 2(x-vt)/t^2
acceleration = 2*(distance - velocity*jumps*dt)/(jumps*dt*jumps*dt);
这工作得很好。这里有一个轻微的拼凑,这让我有点困扰,但我现在不想跟踪它——它可能会抵消代码中的拼凑。
相关文章:
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 查找标准::hash_map与标准::矢量的速度
- 加快在C++中读取/处理日志文件的速度
- 为什么这些算法的运行速度比它们应该的要快?
- 如何提高文件的读取速度?
- 通过libpqxx提高PostgreSQL数据库的更新速度
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- MFC:你能在CDateTimeCtrl中改变自旋的加速度吗?
- 如何加快大字符串的解析速度?
- 如何比较两个函数的速度和性能
- X,Y位置流C++的加速度和速度
- 根据加速度计数据测量速度和距离
- 如何根据现有的加速度/速度规则计算所需的加速度
- 为什么我的球用加速度作为速度