我有一个移动的图形,其速度在每帧中几何衰减。我想找到初始速度,使图形在给定的帧数内行进所需的距离。
使用这些变量:
我可以提出 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;
如果没有使用循环,有没有更好的方法呢?
(如果某处出现错误,我不会感到惊讶......今天只是其中一天......)
答案 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)