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

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

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

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

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

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

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