Перемещение объекта с геометрической прогрессией - PullRequest
0 голосов
/ 16 октября 2018

Я перемещаю некоторый объект по его координате X к цели, как это:

object.x += (target - object.x) * 0.1;  // Distance reduced by 10% each frame

Я выполняю этот каждый кадр со скоростью 60 FPS.Как рассчитать время в секундах (или количество кадров), необходимое для достижения цели (быть ближе, чем данный радиус)?

Я думаю, это называется геометрическая прогрессия или экспоненциальный спад но не смог найти, как применить эти идеи и формулы для решения моей проблемы.

1 Ответ

0 голосов
/ 16 октября 2018

Подсказка дается в комментарии:

// Distance reduced by 10% each frame

Это можно использовать для построения явной формулы для конечной позиции:

final = abs(initial - target) * pow(1 - 0.1, frames);

начальное смещение умножается на 0,9 каждого кадра (т.е. снижается на 10%).Термин «степень» накапливает эти факторы.

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

frames = log(min_dist / abs(initial - target)) / log(1 - 0.1);

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


Редактировать: для расчета множителя:

mult = 1 - pow(min_dist / abs(initial - target)), 1 / frames);
...