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

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

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

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

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

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

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

 

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

Алгоритм:

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

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

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

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

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

 

Если отрезок частично находится в области отображения
Отрезок разбивается на части - в месте пересечения с окном
Алгоритм повторяется для каждого из полученных отрезков