Алгоритм Коэна-Сазерленда прекрасно работает при анализе сцен, содержащих множество прямолинейных отрезков, немногие из которых действительно попадают в формируемое изображение. В этом случае большинство отрезков отбрасывается в результате логического
Рис. 7.7. Варианты расположения отрезков, анализируемых алгоритмом Коэна-Сазерленда
7.3. Отсечение отрезков анализа характеристических кодов конечных точек, что не занимает много времени. Алгоритм без труда можно распространить и на трехмерный случай.
Но мы не рассмотрели, как вычислять точки пересечения отрезка с границами рамки. Какой из возможных методов предпочесть, зависит от формы представления отрезка в программе, но в любом случае потребуется, как минимум, одна операция деления действительных чисел. Если используется стандартная явная форма представления прямой у = тх + И, где т - коэффициент наклона прямой, а И - ордината точки пересечения с осью у, то значения т и И можно вычислить по известным координатам крайних точек. Но в такой форме нельзя представить вертикальную линию - известный всем недостаток явной формы представления. Если необходимо вычислять точки пересечения только в процессе реализации алгоритма Коэна-Сазерленда, то соответствующая функция будет довольно простой, поскольку отрезок всегда пересекается линией, параллельной одной из координатных осей. Но, скорее всего, нам потребуется функция, которая бы определяла точку пересечения прямых произвольной ориентации. Поэтому лучше ориентироваться на представление прямой в параметрической форме. Этот способ представления прямой рассматривался в главе 4, а применительно к кривым и поверхностям мы рассмотрим его в главе 10.
7.3.2. Алгоритм Лианга-Барского В алгоритме Лианга-Барского (Ыаг^-Вагеку) используется параметрическая форма представления прямой. Пусть отрезок задан двумя крайними точками р, = [*1,.У1]Г и р2 = [^2,^2] Т Тогда параметрические уравнения прямой примут вид лг(сс) = (1-сф-1 + ссс2, Яа) = (1-сф, + ау2.
Переходя к матричной форме записи, получим"opengl5_321.html">⇐ Предыдущая| |Следующая ⇒