用衰减速度计算距离的公式

时间:2015-09-01 23:23:35

标签: animation math

我有一个移动的图形,其速度在每帧中几何衰减。我想找到初始速度,使图形在给定的帧数内行进所需的距离。

使用这些变量:

  • v 初始速度
  • r 评分
  • d 距离

我可以提出 d = v *(r 0 + r 1 + r 2 + ...)

因此,如果我想找到 v 在3帧中传输200像素,衰减率为90%,我会适应:

d = 200

r = .9

v = d /(r 0 + r 1 + r 2

这并不能很好地转换为代码,因为如果帧数发生变化,我必须编辑表达式。我能想到的唯一解决方案是(没有特定的语言):

r = .9
numFrames = 3
d = 200
sum = 1
for (i = 1; i < numFrames; i++) {
    sum = sum + power(r, i);
}
v = d / sum;

如果没有使用循环,有没有更好的方法呢?

(如果某处出现错误,我不会感到惊讶......今天只是其中一天......)

2 个答案:

答案 0 :(得分:1)

这里有几何序列。看到链接: http://www.mathsisfun.com/algebra/sequences-sums-geometric.html

要查找几何序列的总和,请使用以下公式:

sum = a * ((1 - r^n) / (1 - r))

由于您正在寻找a,初始速度,请移动术语:

a = sum * ((1-r) / (1 - r^n))

在Java中:

int distanceInPixels = SOME_INTEGER;
int decayRate = SOME_DECIMAl;
int numberOfFrames = SOME_INTEGER;

int initialVelocity; //this is what we need to find

initialVelocity = distanceinPixel * ((1-decayRate) / (1-Math.pow(decayRate, NumberOfFrames)));

使用此公式,如果您知道其他三个变量的值,则可以获取四个变量中的任何一个。享受!

答案 1 :(得分:0)

根据http://mikestoolbox.com/powersum.html,您应该能够将for循环减少到:

F(x)=(x ^ n - 1)/(x-1)