Добавил:
sergeevpavel0406@mail.ru СОВА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика в техническом университете / Информатика в техническом университете. Компьютерная графика

.pdf
Скачиваний:
83
Добавлен:
06.03.2018
Размер:
6.96 Mб
Скачать

4.1. Методы и алгоритмы двухмерной компьютерной графики

чески, а также более эффективные проверки тривиальных отклонений, которые справедливы для любых областей отсечения. Рассмотрим основы алгоритма Ки- руса—Бека. Напомним, что алгоритм Кохена—Сазерленда для линий, которые не могут быть тривиально приняты или отклонены, вычисляет точки пересечения отрезка линии с ребром отсечения, подставляя известное значение координат х или у для вертикального или горизонтального ребра отсечения соответственно. Параметрический алгоритм отсечения отрезка определяет значение параметра t в параметрическом представлении отрезка линии для точки, в которой бесконечная линия этого отрезка пересекает бесконечную линию, на которой находится ребро отсечения. Поскольку все ребра отсечения в общем случае пересекаются такой линией, надо рассчитать четыре значения t. При этом для определения тех из четырех значений /, которые соответствуют фактическим пересечениям, используется ряд простых сравнений. Только после этого определяются значения (х, у) для одного или двух фактических пересечений. В целом этот подход более экономичный, чем алгоритм вычисления пересечения Кохена—Сазерленда, поскольку он не содержит цикла для отсечений несколькими ребрами прямоугольника отсечения. Кроме того, вычисления относительно одного параметра более простые, чем решение уравнений относительно координат (х, у). Лианг и Барски улучшили алгоритм Кируса—Бека, исследуя каждое значение t для того, чтобы отклонить некоторый отрезок линии, прежде чем все четыре значения t будут вычислены.

Алгоритм Кируса—Бека основан на параметрической формулировке пересечения между двумя линиями. На рис. 4.50 изображено единственное ребро Е, прямоугольника отсечения и нормаль Nt этого ребра, направленную вне области отсечения (т. е. направленную наружу относительно прямоугольника отсечения), а также отрезок линии PQP\, который должен быть отсечен этим ребром. Ребро и отрезок линии необходимо представить бесконечной прямой линией, чтобы найти точку пересечения. Параметрически такая линия описывается следующим уравнением:

ЩР(1)-РЕо)<О

Ребро

прямоугольника

отсечения

Рис. 4.50. Параметрические оценки для трех точек — внутри, вне и на границе ребра отсечения

333

4. Методы, алгоритмы и форматы файлов компьютерной графики

P0 + (Pl-P0)t,

где t = О в точке Ро и t - 1 в точке Р\.

Выберем произвольную точку РЕ на ребре Et и рассмотрим три вектора P(t) - РЕ от РЕ до трех определяемых точек P(t,) на отрезке линии от Ро до Pi

точка пересечения, которая будет определена; точки линии во внутренней полуплоскости ребра и точки линии во внешней полуплоскости ребра. Анализируя значение скалярного произведения, можно различить, в какой области находится точка. Это значение отрицательно для точки во внутренней полуплоскости, равно нулю для точки на линии, содержащей ребро, и положительно для точки, которая находится во внешней полуплоскости. Определение внутренних и внешних полуплоскостей ребра соответствует просмотру областей отсечения ребер против часовой стрелки. Таким образом можно найти значение t для точки пересечения вектораPQP\ С ребром:

Ni(P(t)-PEi) = 0.

Заменим P(t):

затем сгруппируем члены уравнения

Введем вектор D = (Р1 - Ро) и определим V.

ЩР0Е.]

(4.2)

-NtD

 

Знаменатель выражения (4.2) должен быть отличным от нуля, поэтому алгоритм проверяет:

Nt ФО (Т. е. нормаль не должна быть равна нулю; это могло быть только ошибкой);

D Ф О (т. е. Рх Ф Ро);

NtD4t0 (т. е. ребро Et и отрезок Р$Р\ не параллельны).

Уравнение для вычисления t можно использовать для нахождения пересечения между отрезком f^Pi и каждым ребром прямоугольника отсечения. Для этого определяют нормаль и произвольную точку РЕ , например конечную точку ребра для каждого ребра отсечения. Далее используют эти значения для всех отрезков линий. Определив четыре значения t для некоторого отрезка линии, на следующем шаге находим, какое (или любое) из значений соответствует внутренним пересечениям отрезка линии с ребрами прямоугольника отсечения. Сначала любое значение t вне интервала [0, 1] может быть отвергнуто, так как оно

334