Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Men dating men savoir faire out of, connection, and the beauty of relationships in their own unique way. https://analxxx... In a life that embraces distinctiveness and inclusivity, same-sex relationships keep found their place. Men who ancient men...
Пиривет сайт с работой закладчиком Работа ежедневные выплаты Если у вас небольшой доход или его вообще нет, то стоит обратить внимание на возможность подработки курьером. Это простая и хорошо оплачиваемая работа.
Последнее из блога https://fkmed.r... Оплата и доставка Условия возврата Гарантия качества https://fkmed.r... Медицинская одежда в розницу https://fkmed.r... Красота и свобода выбора https://fkmed.r... Как купить медицинский костюм в сети магазинов
Фамилия автора Вичек -- венг. Vicsek Tamás. Висекк это двойная не правильная транскрипция с венгерского на английски и с английского на русский. Поправьте пожалуйста.
Men dating men experience love, consistency, and the dream of relationships in their own unmatched way. https://voyeurp... In a superb that embraces diversity and inclusivity, same-sex relationships suffer with develop their place. Men who obsolete...

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика

Система частиц – широко используемый в компьютерной графике метод представления объектов, не имеющих четки геометрических границ. Облака, туманности, дым, снег – все эти объекты моделируются с помощью систем частиц.
Мы попробуем организовать примитивную систему, моделирующую взаимодействие множества частиц с некоторой точечной силой. При этом под «точечной силой» может подразумеваться гравитационное, электромагнитное или другое взаимодействие похожего рода. При этом наша сила будет появляться и исчезать по нашему желанию.

Итак, необходимо чтобы некоторая сила, воздействовала на каждую точку.
В данном случае я задаю силу весьма тривиально: чем ближе частица в источнику, тем сильнее воздействие. То есть F = G \ D^2. Где G – некоторая константа, с помощью которой мы сможем регулировать взаимодействие, D – расстояние между источником силы и частицей. Сразу оговорюсь что в этой формуле не хватает маленькой детали – не понятно в каком направлении должна действовать сила, то есть надо дополнить формулу так, чтобы F стала векторной величиной, дополним формулу еще одним, на этот раз векторным множителем N = {x, y}, равному разности между координатами источника силы, и координатами нашей точки. Конечный вид формулы F = (G * N) / D^2 .
К слову, если модифицировать формулу знаком минус: F = - (G * N) / D^2, источник силы начнет отталкивать частицы от себя.
Однако, воздействие всего одной силы на точку будет давать слишком «идеальное» движение. Создадим некую силу сопротивления или тормозящую силу, кому как больше нравится. Формула силы сопротивления, в нашем случае, выглядит еще проще Fc = -V * K, где V – вектор скорости, а K – опять-таки, некоторый коэффициент.
Теперь на нашу частицу воздействует по меньшей мере две силы. Следующий шаг – нахождение ускорения.
Вспоминает школьный курс физики (привет, Ньютон) F = m*a a = F/m. Где F – равнодействующая сила, то есть сумма всех сил, действующих на объект.
Напомню вам пару незатейливых фактов:
1. Ускорение характеризует быстроту изменения скорости.
2. Производная от перемещения по времени – скорость.

Также замечу, что мы получили ускорении только на отдельно взятом кадре.
Найдем скорость на данном кадре следующим образом: V(t) = a*dt + V(t - 1) . Здесь dt - это время, которое было потрачено на обработку и прорисовку предыдущего кадра, V(t – 1) – скорость, на прошлом кадре. Для нахождения новых координат частицы осталось воспользоваться вторым фактом, вернее следствием из него. А следствие из него следующее – интеграл от скорости – перемещение. Так что просто находим первообразную нашей скорость по dt. Получаем: x(dt) = ½ * a * dt^2 + V(t – 1) * dt . Таким образом мы нашли перемещение на данном кадре, теперь прибавляем к текущим координатам перемещение, и получаем координаты частицы на данном кадре. X(t) = ½ * a * dt^2 + V(t – 1) * dt + X(t-1).
Напоследок замечу, что новую скорость нашей частицы можно определить как V = (X(t) – X(t – 1)) / dt где X – координаты точки на новом и предыдущем кадре соответственно. В коде, такой вариант работает немного быстрее.