Re: поведение частиц

From
Valentin Davydov ()
To
Alexey N Konoplyov
Date
2002-08-19T22:04:40Z
Area
RU.ALGORITHMS
From: Valentin Davydov <val@sqdp.trc-net.co.jp>

>   From: Alexey N Konoplyov
>          <Alexey.N.Konoplyov@p512.f156.n5070.z2.fidonet.org>
>   Date: Sun, 18 Aug 2002 17:18:34 +0400
>
>    Задача: моделируется поведение частиц на 2d плоскости. Частцы обладают
>массой и притягиваются друг к другу исходя из общеизвестных соотношений
>F=G*m1*m2/R^2, F=m*a.
>
>    Сейчас это реализовано так: на каждом шаге просчета для каждой из частиц
>высчитывается вектор ускорения, и исходя из этого ускорения корректируется
>скорость движения частицы и ее положение на плоскости.
>
>    Основная проблема: нужно промоделировать большое (порядка десятков тысяч)
>число частиц, причем очень желательно - в реальном времени. Но алгоритм, при
>помощи которого рассчитывается новое положение частиц по сути квадратичен, т.е.
>для каждой частицы проверяется воздействие на нее *каждой* из частиц. Как
>следствие - получаем низкую скорость.
>
>    Вопрос - можно ли как-нибудь снизить степень сложности алгоритма? В данной
>реализации потолок - полторы тысячи объектов, один кадр в секунду. Объектов
>необходимо на порядок или два поболее.

Если распределение частиц можно параметризовать, то попробуй использовать
метод Хартри-Фока, когда движение каждой частицы рассматривается в некоем
усреднённом потенциале, который, в свою очередь, зависит от положения всех
частиц и вычисляется только один раз за итерацию. В твоей конкретной задаче 
(искусственное ограничение движения частиц плоскостью), скорее всего, 
придётся отдельно учитывать столкновения, то есть случаи, когда энергия 
взаимодействия двух сблизившихся частиц становится сравнимой с общим 
потенциалом в этом месте. Расплачиваться за скорость придётся потерей 
информации: вместо траектории каждой частицы ты более-менее надёжно получишь
лишь параметры распределения.

Вал. Дав.
--- ifmail v.2.15dev5
 * Origin: Demos online service (2:5020/400)