2015-09-01 3 views
0

У меня есть движущийся график, скорость которого геометрически распадается на каждый кадр. Я хочу найти начальную скорость, которая заставит графику перемещаться на нужное расстояние в заданном числе кадров.Формула для расчета расстояния со скоростью затухания

Используя эти переменные:

  • V начальная скорость
  • г скорости
  • д расстояние

Я могу придумать г = V * (r + г + г + ...)

Так что, если я хочу, чтобы найти v путешествовать 200 пикселей в 3-х кадров со скоростью распада 90%, я бы адаптироваться к :

д = 200

г = 0,9

v = d/(Г + R + R 2 )

Это не очень хорошо, чтобы перевести код, так как я должен изменить выражение, если число кадров изменений. Единственное решение, которое я могу думать, это (не в конкретном языке):

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

Есть ли лучший способ сделать это без использования цикла?

(я не удивлюсь, если есть ошибка где-то там ... сегодня только один из тех дней ..)

ответ

1

То, что вы здесь геометрическая последовательность.Смотрите ссылку: http://www.mathsisfun.com/algebra/sequences-sums-geometric.html

Чтобы найти сумму геометрической последовательности, можно использовать следующую формулу:

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

Поскольку вы ищете, начальная скорость, двигаться условия вокруг:

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))); 

Используя эту формулу у ou может получить любую из четырех переменных, если вы знаете значения других трех. Наслаждайтесь!

+0

Я завершаю Calc, Calc II, Calc III, линейную алгебру и дифференциальные уравнения и статистику в университете, а затем забываю формулу для геометрической последовательности. Я стыжусь своей головой. Спасибо Арджуну! – user45623

+2

@ user45623 Добро пожаловать, и все в порядке. Человеку естественно забывать о вещах, которые не имеют повседневной важности. Я на самом деле тринадцать, и я изучил формулу, готовящуюся к математическому соревнованию. :-) –

+0

Если вы знаете Java в 13 лет, у вас впереди светлое будущее :) – user45623

Смежные вопросы