Алгоритм Сазерленда
В этом алгоритме отсутствует вычисление точек пересечения с окном. Окно отображения делит экран на 9 областей, положение в которых задаётся четырёхразрядным двоичным кодом. Область окна отсчёта изображения кодируется четырёхразрядным двоичным кодом (в данном случае, a0 - старший разряд):
Например, в разряде a0 стоит 1, если область находится выше окна отсечения.
Рассматривается несколько случаев:
1) отрезок целиком находится в области окна отображения;
2) отрезок частично находится в области окна отображения;
3) отрезок не находится в области окна отображения.
Всем точкам, формирующим изображение (началам и концам отрезков) присваиваются коды областей, где они расположены.
Алгоритм:
1) Определяется, лежит ли отрезок полностью в области отсечения. Для этого выполняется операция логического "ИЛИ" кодов конца отрезка. И если результат =0, то отрезок полностью лежит в области окра отсечения и должен быть сохранён;
2) Выполняется операция логического "И". Если результат операции НЕ равен нулю, то этот отрезок лежит вне области окна отсечения и должен быть отброшен;
3) Если логическое "ИЛИ" для кодов конца отрезка НЕ равно 0, а логическое "И" равно =0, то отрезок прямой пересекается с окном отображения. Причём, результат логического "ИЛИ" (не равный нулю) укажет, с какой границы от окна отображения находится отрезок;
4) Далее, если отрезок пересекает окно отображения, ищем точку пересечения; концам отрезков присваиваются новые коды;
5) Далее алгоритм повторяется для полученных отрезков.
Если отрезок частично находится в области отображения |
Отрезок разбивается на части - в месте пересечения с окном |
Алгоритм повторяется для каждого из полученных отрезков |