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

Вход на сайт

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

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

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

Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...
Комментарии на английском переведите на русский. Дополните код комментариями, чтоб было понятно как работает алгоритм
Пример, к которому вы оставили комментарий строит именно то самое изображение на языке с#, которое вам необходимо. Отличается только цветовая палитра.

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

Рейтинг@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 – координаты точки на новом и предыдущем кадре соответственно. В коде, такой вариант работает немного быстрее.