Подсказка дается в комментарии:
// 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);