Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kompyuternaya_grafika_1-20.docx
Скачиваний:
9
Добавлен:
24.09.2019
Размер:
528.26 Кб
Скачать

18. Алгоритмы заполнения, использующие математическое описание контура. Заполнение прямоугольника и круга.

Математическим описанием контура может служить уравнение y=f(x) для окружности, эллипса или другой кривой. Для многоугольников (полигонов) контур задается множеством координат вершин (xi,yi). Возможны и другие формы описания контура. В любом случае алгоритмы данного класса не предусматривают обязательное предварительное создание пикселов контура растра - контур может совсем не выводиться в растр. Рассмотрим некоторые подобные алгоритмы заполнения.

З аполнение прямоугольника. Если прямоугольник задан координатами противоположных углов, например, левого верхнего (x1,y1) и правого нижнего (x2,y2), тогда алгоритм может заключаться в последовательном рисовании горизонтальных линий заданного цвета:

для y от y1 до y2с шагом 1:

нарисовать горизонтальную линию с координатами (x1,y)-(x2,y)

Заполнение круга. Для заполнения круга можно использовать алгоритм вывода контура, который был рассмотрен на предыдущих лекциях. В процессе выполнения этого алгоритма последовательно вычисляются координаты пикселов контура в границах одного октанта. Для заполнения надлежит выводить горизонтали, которые соединяют пары точек на контуре, расположенные симметрично относительно оси y.

Аналогично может быть построен и алгоритм заполнения эллипса.

19. Алгоритмы заполнения, использующие математическое описание контура. Заполнение полигона.

Математическим описанием контура может служить уравнение y=f(x) для окружности, эллипса или другой кривой. Для многоугольников (полигонов) контур задается множеством координат вершин (xi,yi). Возможны и другие формы описания контура. В любом случае алгоритмы данного класса не предусматривают обязательное предварительное создание пикселов контура растра - контур может совсем не выводиться в растр. Рассмотрим некоторые подобные алгоритмы заполнения.

З аполнение полигона. Контур полигона (в векторной форме) определяется вершинами, которые соединены отрезками прямых.

Один из наиболее популярных алгоритмов заполнения полигона заключается в закрашивании фигуры отрезками прямых горизонтальных линий. Алгоритм представляет собою цикл вдоль оси y, в ходе этого цикла выполняется поиск точек сечения линии контура с соответствующими горизонталями. Этот алгоритм получил название XY (Ж.Эгрон):

  1. Найти min{yi} и max{yi} среди всех вершин Pi.

  2. Выполнить цикл по y от y=min до y=max:

  3. Найти точки пересечения всех отрезков контура с горизонталью y;

  4. Координаты xj точек сечения записать в массив;

  5. Отсортировать массив {xj} по возрастанию x;

  6. Вывести горизонтальные отрезки с координатами

(x0, y) - (x1, y)

(x2, y) - (x3, y)

………………

(x2k, y) - (x2k+1, y)

Каждый отрезок выводится цветом заполнения.

В этом алгоритме использовано свойство топологии контура фигуры. Оно состоит в том, что любая прямая линия пересекает любой замкнутый контур четное число раз. Для выпуклых фигур существуют ровно две точки пересечения с любой прямой. Таким образом, на шаге 4 этого алгоритма в массив {xj} всегда должно записываться парное число течек сечения.

При нахождении точек пересечения горизонтали с контуром необходимо принимать во внимание особые точки. Если горизонталь имеет координату y, совпадающую с yi вершины Pi, тогда надлежит анализировать то, как горизонталь проходит через вершину. Если горизонталь при этом пересекает контур (как, например, в вершинах P0 или P4), то в массив записывается одна точка сечения. Если горизонталь касается вершины контура (в этом случае вершина соответствует локальному минимуму или максимуму, как, например, в вершинах P1,P2,P3 или P5), тогда координата точки касания или не записывается, или записывается в массив два раза. Это условие четности числа количества точек пересечения, хранящихся в массиве {xj}.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]