
- •Введение.
- •Цели, задачи и структура курса.
- •Предмет компьютерной графики.
- •Сферы применения компьютерной графики.
- •Отображение информации.
- •Проектирование.
- •Моделирование.
- •Интерфейс пользователя.
- •Графическая система.
- •Объект и наблюдатель.
- •Визуализация изображений.
- •Растровая визуализация.
- •Векторная визуализация.
- •Цвет
- •Свет и изображение.
- •Глаз человека.
- •Характеристики цвета.
- •Цветовые модели.
- •Глубина цвета
- •Палитра
- •Координаты.
- •Прямоугольная система координат на плоскости.
- •Прямоугольная система координат в 3-x мерном пространстве.
- •Прямоугольная система координат в n-мерном пространстве.
- •Полярная система координат.
- •Графическое представление.
- •Трёхмерное расширение.
- •Цилиндрическая система координат.
- •Сферическая система координат.
- •Координаты в матричном виде.
- •Произведение матриц.
- •Преобразование координат.
- •Аффинные преобразования координат.
- •Аффинные преобразования координат на плоскости.
- •Однородные координаты.
- •Аффинные преобразования координат в трехмерном пространстве.
- •Преобразования объектов.
- •Аффинные преобразования объектов на плоскости.
- •Трехмерные аффинные преобразования объектов.
- •Композиция преобразований.
- •Эффективность преобразований.
- •Базовые растровые алгоритмы.
- •Связность.
- •Алгоритмы вывода прямой линии
- •Прямое вычисление координат.
- •Алгоритм Брезенхэма.
- •Алгоритм вывода окружности.
- •Алгоритм Брезенхэма построения окружности.
- •Растеризация многоугольника.
- •Алгоритм со списком реберных пересечений.
- •Алгоритм заполнения со списком активных ребер.
- •Заливка с затравкой.
- •Алгоритмы отсечения.
- •Отсечение отрезков.
- •Алгоритм Коэна-Сазерленда.
- •FC-алгоритм.
- •Алгоритм Лианга-Барски.
- •Двумерный алгоритм Кируса — Бека
- •Проверка выпуклости многоугольника и определение нормалей
- •Алгоритм с использованием векторных произведений
- •Разбиение не выпуклых многоугольников
- •Отсечение многоугольника
- •Алгоритм Сазерленда-Ходгмана
- •Простой алгоритм отсечения многоугольника
- •Алгоритм отсечения многоугольника Вейлера-Азертона
- •Удаление невидимых линий и поверхностей.
- •Алгоритм удаления поверхностей с Z-буфером.
- •Алгоритм разбиения области Варнока.
- •Алгоритм трассировки лучей.

Компьютерная графика.
Бека с использованием параметрического представления линии:
M(t) = P0 + ( P1 – P0 ) ∙ t |
(27) |
Вначале находится значение параметра t для точки пересечения по формуле:
t = -Qn / Pn |
(28) |
где Qn - скалярное произведение вектора нормали к ребру окна на вектор из начала ребра в начальную точку стороны, уже вычисленное при определении расположения начальной точки, а Pn = (P1 — P0) · Nr - скалярное произведение вектора нормали к ребру окна на вектор из начальной в конечную точки отсекаемой стороны.
Легко выразить это произведение через уже вычисленные величины Qn и Qk:
Pn = ( P1 – P0 ) ∙ Nr
Pn = ( P1 – P0 – R + R ) ∙ Nr (29)
Pn = ( P1 – R ) ∙ Nr - ( P0 – R ) ∙ Nr
Pn = Qn — Qk
Таким образом, точке пересечения соответствует значение параметра t, равное:
t = Qn / ( Qn – Qk )
Значения координат пересечения находятся из:
Xp = X0 + ( X1 – X0 ) ∙ t
Yp = Y0 + ( Y1 – Y0 ) ∙ t
(30)
(31)
Алгоритм отсечения многоугольника Вейлера-Азертона
Рисунок 57: Частные случаи пересечения (а - случаи не считающиеся пересечением, б - точки A и D считаются пересечением, точки B и C не считаются пересечением)
В предыдущих разделах были рассмотрены два алгоритма отсечения
-68-
Компьютерная графика.
многоугольника, последовательно отсекающие произвольный (как выпуклый, так и невыпуклый) многоугольник каждой из сторон выпуклого окна. Зачастую же требуется отсечение по невыпуклому окну. Кроме того оба рассмотренных алгоритма могут генерировать лишние стороны для отсеченного многоугольника, проходящие вдоль ребра окна отсечения. Далее рассматриваемый алгоритм Вейлера-Азертона свободен от указанных недостатков ценой заметно большей сложности и меньшей скорости работы.
Предполагается, что каждый из многоугольников задан списком вершин, причем таким образом, что при движении по списку вершин в порядке их задания внутренняя область многоугольника находится справа от границы.
В случае пересечения границ и отсекаемого многоугольника и окна возникают точки двух типов:
•входные точки, когда ориентированное ребро отсекаемого многоугольника входит в окно,
•выходные точки, когда ребро отсекаемого многоугольника идет с внутренней на внешнюю стороны окна.
Общая схема алгоритма Вейлера-Азертона для определения части отсекаемого многоугольника, попавшей в окно, следующая:
1.Строятся списки вершин отсекаемого многоугольника и окна.
2.Отыскиваются все точки пересечения. При этом расчете касания не считаются пересечением, т.е. когда вершина или ребро отсекаемого многоугольника совпадает со стороной окна (рис. 57, 58).
3.Списки координат вершин отсекаемого многоугольника и окна дополняются новыми вершинами - координатами точек пересечения. Причем если точка
пересечения Pk находится на ребре, соединяющем вершины Pi, Pj, то последовательность точек Pi, Pj превращается в последовательность Pi, Pk, Pj. При этом устанавливаются двухсторонние связи между одноименными точками пересечения в списках вершин отсекаемого многоугольника и окна. Входные и выходные точки пересечения образуют отдельные подсписки входных и выходных точек в списках вершин.
4.Определение части обрабатываемого многоугольника, попавшей в окно выполняется следующим образом:
•Если не исчерпан список входных точек пересечения, то выбираем очередную входную точку.
•Двигаемся по вершинам отсекаемого многоугольника пока не обнаружится следующая точка пересечения; все пройденные точки, не включая прервавшую просмотр, заносим в результат.
•Используя двухстороннюю связь точек пересечения, переключаемся на просмотр списка вершин окна.
•Двигаемся по вершинам окна до обнаружения следующей точки пересечения; все пройденные точки, не включая последнюю, прервавшую просмотр, заносим в результат.
•Используя двухстороннюю связь точек пересечения, переключаемся на список вершин обрабатываемого многоугольника.
•Эти действия повторяем пока не будет достигнута исходная вершина - очередная часть отсекаемого многоугольника, попавшая в окно, замкнулась.
•Переходим на выбор следующей входной точки в списке отсекаемого многоугольника.
-69-

Компьютерная графика.
Модификация этого алгоритма для определения части отсекаемого многоугольника, находящейся вне окна, заключается в следующем:
•исходная точка пересечения берется из списка выходных точек,
•движение по списку вершин окна выполняется в обратном порядке, т.е. так чтобы внутренняя часть отсекателя была слева.
На рис. 58 иллюстрируется отсечение многоугольника ABCDEFGH окном KLMN по алгоритму Вейлера-Азертона.
Рисунок 58: Отсечение по алгоритму Вейлера-Азертона.
-70-