Основы компьютерной графики для программистов. Казанцев А.В. - 39 стр.

UptoLike

Составители: 

Основы компьютерной графики для программистов 39
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
решать систему из двух уравнений, используя операции умножения и деления. При
этом удобно параметрическое задание прямых:
(
)
121 xxtxx
+
=
(
)
121 yytyy
+
=
.
Для
[]
1,0t эти уравнения определяют точки, находящиеся между
()
1,1 yx и
()
2,2 yx . Специальной проверки требует случай, когда отрезок параллелен стороне
окна. Пусть координата
x точки пересечения найдена, тогда
12
1
xx
xx
t
=
()
12
12
1
1
yy
xx
xx
yy
+=
Рассмотрим алгоритм Коэна-Сазерленда для отсечения отрезков прямых. Этот
алгоритм позволяет легко определять нахождение отрезка полностью внутри или
полностью снаружи окна, и если так, то его можно рисовать или не рисовать, не
заботясь об отсечении по границе окна.
Для работы алгоритма вся плоскость в которой лежит окно разбивается на девять
подобластей
или квадрантов, как показано на рис. 31.
Окну соответствует область обозначенная кодом 0000. Конечным точкам отрезка
приписывается 4-битный кодвне/внутри в зависимости от нахождения отрезка в
соответствующей подобласти. Каждому биту присваивается значение 1 в соответствии
со следующим правилом.
Бит 1 - точка находится выше окна;
Бит 2 – точка находится ниже окна;
Бит 3 - точка находится справа
от окна;
Бит 4 - точка находится слева от окна;
Иначе биту присваивается нулевое значение. Значения этих битов для конечных точек
отрезков легко определить по знакам
соответствующих разностей:
()
yy
max
- для 1-го бита,
()
min
yy - для 2-го бита,
()
xx
max
- для 3-го бита и
()
min
xx - для 4-го бита. Отрезок
рисуется без отсечения, то есть
принимается целиком, если оба кода
равны 0000, или
[]
1кодP ИЛИ
[]
00002 =кодP , где
ИЛИбинарная операция. Отрезок
отбрасывается без вычислений если
оба его конца находятся выше, ниже,
правее или левее окна. В этих случаях
соответствующие биты в обоих кодах
равны 1 и это легко определить, умножив эти коды по бинарной операции И. Если
результат операции И равен 0000, то отрезок нельзя ни принять ни
отбросить, так как
он может пересекаться с окном. В этом случае применяется последовательное
разделение отрезка, так что на каждом шаге конечная точка отрезка с ненулевым кодом
Рис. 31. Разбиение на подобласти в методе
Коэна-Сазерленда.
Основы компьютерной графики для программистов                                                                  39
____________________________________________________________________________________________________________________



решать систему из двух уравнений, используя операции умножения и деления. При
этом удобно параметрическое задание прямых:
                                                     x = x1 + t ( x 2 − x1)
                                                     y = y1 + t ( y 2 − y1) .
Для t ∈ [0,1] эти уравнения определяют точки, находящиеся между                                       (x1, y1)      и
(x2, y 2 ) .
          Специальной проверки требует случай, когда отрезок параллелен стороне
окна. Пусть координата x точки пересечения найдена, тогда
                                                 x − x1              x − x1
                                         t=              ⇒ y = y1 +          ( y 2 − y1 )
                                                x 2 − x1            x 2 − x1
Рассмотрим алгоритм Коэна-Сазерленда для отсечения отрезков прямых. Этот
алгоритм позволяет легко определять нахождение отрезка полностью внутри или
полностью снаружи окна, и если так, то его можно рисовать или не рисовать, не
заботясь об отсечении по границе окна.
Для работы алгоритма вся плоскость в которой лежит окно разбивается на девять
подобластей или квадрантов, как показано на рис. 31.
Окну соответствует область обозначенная кодом 0000. Конечным точкам отрезка
приписывается 4-битный код “вне/внутри” в зависимости от нахождения отрезка в
соответствующей подобласти. Каждому биту присваивается значение 1 в соответствии
со следующим правилом.
Бит 1 - точка находится выше окна;
Бит 2 – точка находится ниже окна;
Бит 3 - точка находится справа от окна;
Бит 4 - точка находится слева от окна;
Иначе биту присваивается нулевое значение. Значения этих битов для конечных точек
отрезков легко определить по знакам
соответствующих           разностей:
( y max − y ) - для 1-го бита,
( y − y min ) - для 2-го бита,
(x max − x ) - для 3-го бита и
(x − x min ) - для 4-го бита. Отрезок
рисуется без отсечения, то есть
принимается целиком, если оба кода
равны            0000,            или
[кодP1] ИЛИ [кодP2] = 0000 , где
ИЛИ – бинарная операция. Отрезок
отбрасывается без вычислений если
                                            Рис. 31. Разбиение на подобласти в методе
оба его конца находятся выше, ниже,                      Коэна-Сазерленда.
правее или левее окна. В этих случаях
соответствующие биты в обоих кодах
равны 1 и это легко определить, умножив эти коды по бинарной операции И. Если
результат операции И равен 0000, то отрезок нельзя ни принять ни отбросить, так как
он может пересекаться с окном. В этом случае применяется последовательное
разделение отрезка, так что на каждом шаге конечная точка отрезка с ненулевым кодом

http://www.ksu.ru/persons/9134.ru.html