Анимация броуновского движения

Подскажите, пожалуйста, как создать анимацию броуновского движения? Объект должен двигаться по экрану меняя финальные координаты при достижении, например, границы активности. В идеале в пределах активности/фрагмента, но можно и с разлетом за предел. Из мыслей только динамически задавать новые координаты при достижении текущих, но эта идея не нравится.


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

Автор решения: Barmaley Red Star

Я полагаю ТС интересует не техника, а математика - как моделировать.

Делается это так:

  1. Задаем начальные координаты частицы {X0, Y0}
  2. Далее для каждой координаты задаем случайную вероятность, скажем {Px, Py} (P - вероятность от 0 до 1)
  3. Вычисляем смещение вдоль каждой координаты через инверсную функцию вероятностей Гаусса X1=X0+InvGauss(Px), Y1=Y0+InvGauss(Py)
  4. Далее по циклу вычисляем на основе {x1, y1} уже {x2, y2} и.т.д.

Физический смысл состоит в том, что частица в ходе броуновского движения испытывает множественные случайные столкновения, которые как раз и описываются распределением вероятности Гаусса т.н. шапкой Гаусса

Вычисление инверсной функции Гаусса (то есть вычисление из вероятности величины отклонения) можно найти здесь

Величину прыжков частицы можно регулировать параметром sigma - среднеквадратичным отклонением.

Также в помощь симуляция броуновского движения на Excel

→ Ссылка