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

Вход на сайт

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

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

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

torrvic, возможно, Вам нужно добавить -lGLU
Извините за тупой вопрос. У меня при сборке Вашего примера выходит ошибка: "undefined reference to gluLookAt". Не могу найти в какой библиотеке находится эта функция. У меня задано: -lGL -lglut ... Искал в /usr/lib таким образом: nm lib*so* | grep...
Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...

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

Рейтинг@Mail.ru

Вычислительная геометрия

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

Если абстрактно представить любой алгоритм заливки фигур (не специализированный для какой-то конкретной фигуры, а универсальный) то в нем обязательно обнаружится шаг с проверкой удовлетворяет ли выбранная точка некоторым условиям заливки. Чаще всего эти условия простые. Например, является ли цвет выбранной точки таким же, как и цвет точки, с которой началась заливка. Или еще проще — является ли выбранная точка отличной от цвета заливки. В этой статье предлагается сделать заливку более функциональной и «гибкой», изменив тривиальные условия заливки точки на более сложные.

Данный алгоритм позволяет строить эллипсы на сновании координат центра фигуры и длин большей и меньшей полуосей.
Алгоритм является модификацией алгоритма для генерации окружностей.

С помощью данного алгоритма можно заполнить (зарисовать) любую окружность.

Теоретическое обоснование метода заключаются в использовании свойства квадрата и теоремы Пито: " в выпуклый четырёхугольник ABCD можно вписать окружность тогда и только тогда, когда суммы его противоположных сторон равны ".

Ориентированная площадь треугольника – это обычная площадь, снабженная знаком. Знак ориентированной площади треугольника АВС такой же, как у ориентированного угла между векторами AB и AC. То есть ее знак зависит от порядка перечисления вершин.


Рисунок №1

Суть алгоритма поиска в ширину в том, что мы обходим связный граф таким образом, что сначала мы рассматриваем родителя, потом по очереди рассматриваем его предков, потом рассматриваем предков его предков и т.д.
Порядок обхода вершин графа.

Можно объяснить алгоритм двумя способами:

Пусть на плоскости задано некоторое количество точек. Оболочкой множества данных точек называется любая замкнутая линия, которая содержит в себе все эти точки.
Соответственно минимальная выпуклая оболочка - это такая оболочка, которая является выпуклым многоугольником наименьшего периметра.

Это один из простейших алгоритмов удаления невидимых поверхностей. Впервые он был предложен Кэтмулом. Работает этот алгоритм в пространстве изображения.

Предположим, что нам необходимо определить принадлежность точки а полигону р. Для этого из некоторой удаленной точки проведем прямую линию в точку а. На этом пути может встретиться нуль или несколько пересечений границы полигона: при первом пересечении мы входим внутрь полигона, при втором — выходим из него, при третьем пересечении снова входим внутрь и так до тех пор, пока не достигнем точки а. Таким образом каждое нечетное пересечение означает попадание внутрь полигона р, а каждое четное — выход из него.

Алгоритм закраски с затравкой

С помощью этого алгоритма можно закрашивать любые замкнутые области. Исходными данными для этого алгоритма являются цвет границы области и точка, принадлежащая этой области (т.н. затравочный пиксел). Суть метода заключается в следующем: мы берём затравочную точку и закрашиваем её. Для каждого незакрашенного соседа мы выполняем аналогичную процедуру. Т.о. мы получаем рекурсивный алгоритм, описание которого на псевдокоде представлено ниже:

1. Поместить затравочный пиксел в стек;
2. Извлечь пиксел из стека;