Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к зачёту Вечерники / объединенная КГ полная.docx
Скачиваний:
81
Добавлен:
10.05.2014
Размер:
1.6 Mб
Скачать

17. Операция отсечения го (алгоритм Сазерленда)

Преобразование отсечения

Рассмотрим команду построения линии в AutoCad:

Command: line

from point 0,0

to point 2000,1500

Отсечение- это отбрасывание части изображения, лежащей вне заданной области (вне заданного окна).

В приведённом примере: чтобы выполнить отсечение отрезка, ограниченного прямоугольным окном отсечения, необходимо исследовать уравнение отрезка для каждой границы области отсечения:

форма окна более сложная, то расчёты ещё более усложняются.

Общее требование - окно отсечения должно быть выпуклым.

Алгоритм Сазерленда

В этом алгоритме отсутствует вычисление точек пересечения с окном. Окно отображения делит экран на 9 областей, положение в которых задаётся четырёхразрядным двоичным кодом.

Область окна отсчёта изображения кодируется четырёхразрядным двоичным кодом (в данном случае, a0 - старший разряд):

Область изображения

a0

a1

a2

a3

Область окна отсечения

0

0

0

0

Область вышеокна отсечения

1

X

X

X

Область нижеокна отсечения

X

1

X

X

Область, правееокна отсечения

X

X

1

X

Область, левееокна отсечения

X

X

X

1

Например, в разряде a0 стоит 1, если область находится выше окна отсечения.

Рассматривается несколько случаев:

  1. отрезок целиком находится в области окна отображения;

  2. отрезок частично находится в области окна отображения;

  3. отрезок не находится в области окна отображения.

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

Алгоритм:

  1. Определяется, лежит ли отрезок полностью в области отсечения. Для этого выполняется операция логического "ИЛИ" кодов конца отрезка. И если результат =0, то отрезок полностью лежит в области окра отсечения и должен быть сохранён;

  2. я ли отрезок полностью вне окна отсечения. Для этого выполняется операция логического "И". Если результат операции НЕ равен нулю, то этот отрезок лежит вне области окна отсечения и должен быть отброшен;

  3. Если логическое "ИЛИ" для кодов конца отрезка НЕ равно 0, а логическое "И" равно =0, то отрезок прямой пересекается с окном отображения. Причём, результат логического "ИЛИ" (не равный нулю) укажет, с какой границы от окна отображения находится отрезок;

  4. Далее, если отрезок пересекает окно отображения, ищем точку пересечения; и концам отрезков присваиваются новые коды;

  5. Далее алгоритм повторяется для полученных отрезков.

  1. 3 применяется алгоритм нахождения пересечения отрезка с границей области отсечения.

18. Растровые преобразования прямой (скэн преобразования).

Рассмотрим команду построения линии в AutoCad:

Command: line

from point 5,10

to point 10,20

Цель scan-преобразования - представить начальную и конечную координату отрезка в совокупность пикселей в видеобуфере.

Подходы к решению задачи:

1) Использование классического уравнения прямой.

т.е. перебираем все множество точек. Чем меньше зерно (пиксель), тем дольше идет операция. Занимает много времени, а следовательно уменьшается быстродействие. Такой подход редко используется, несмотря на простоту.

2) Метод вычисления по приращению (алгоритм Брезенхема1)

По известным координатам x и y начального пикселя прямой с помощью прибавления приращений по осям x и y с учётом наклона прямой можно найти положение следующего пикселя.

С помощью этого алгоритма формируется набор пикселей, наиболее близко прилежащих к данной прямой.

Допущения:

  1. Наша прямая проходит через начало координат;

  2. Она проходит под углом α ≤ 45° (0 ≤ tgα ≤ 1);

  3. ;

  4. (0, 0) – координаты начального пикселя.

Тогда уравнение прямой:

То есть в общем случае мы имеем алгоритм следующего вида: