Как расчитать плавное уменьшение иконки при отдалении от неё?
Ищу пример расчета плавного изменения размера иконки при отдалении от объекта).
Что мы имеем:
0 - расстояние (начало просмотра)
2000 - расстояние (максимальная отдалённость)
1 - размер иконки при расстояние - 0 (начало просмотра)
0.3 - размер иконки при максимальном отдалении 2000
Ответы (2 шт):
Например, линейная зависимость, если не обращать внимание на возможную физическую сущность:
Size = 1.0 - 0.7*distance/2000
Или чуть ближе к ней: берём формулу (упрощённая формула (считаем tg(x)~x) для видимого размера)
Size = k/(k+distance)
и находим k, которое обеспечивает верное значение при макс. дальности, получается
Size = 857.14286 / (857.14286 + distance)
Обычно это делается функцией линейной интерполяции lerp:
function lerp(a, b, f: single): single;
Result = a + (b - a) * f;
где a и b это границы, а f - коэффициент внутри этих границ от 0 до 1.
что в вашем случае превращается в
a = 1;
b = 0.3;
f = currentDistance / 2000;
для расстояния currentDistance = 200
Result = 1 + (0.3 - 1) * (200 / 2000); // 0.93
для расстояния currentDistance = 1800
Result = 1 + (0.3 - 1) * (1800 / 2000); // 0.37
Имея lerp, легко сделать его нелинейным, например через f = sin(f) или f = f * f или f = sqrt(f).