Как расчитать плавное уменьшение иконки при отдалении от неё?

Ищу пример расчета плавного изменения размера иконки при отдалении от объекта).

Что мы имеем:

0 - расстояние (начало просмотра)

2000 - расстояние (максимальная отдалённость)

1 - размер иконки при расстояние - 0 (начало просмотра)

0.3 - размер иконки при максимальном отдалении 2000


Ответы (2 шт):

Автор решения: MBo

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

Size = 1.0 - 0.7*distance/2000

Или чуть ближе к ней: берём формулу (упрощённая формула (считаем tg(x)~x) для видимого размера)

Size = k/(k+distance)

и находим k, которое обеспечивает верное значение при макс. дальности, получается

Size = 857.14286 / (857.14286 + distance)
→ Ссылка
Автор решения: Kromster

Обычно это делается функцией линейной интерполяции 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).

→ Ссылка