3.3. Отсечение линий это вычисление. Точка Р находится левее и выше окна W. Эти два обстоятельства записываются в кодовое слово для Р. Буква Т (TRUE) указывается для двух полей: «слева» от окна и «выше». Буква F (FALSE) указывается для двух остальных полей: «справа» от окна и «ниже».

Френсис Хилл

Рис. 3.16. Кодирование расположения точки Р относительно окна Пусть, например, точка Р находится внутри окна, тогда ее код равен РРРР. Если Р ниже, но ни слева, ни справа от окна, то ее код равен РРРТ. На рнс. 3.17 показаны все девять возможных расположений с кодом для каждого из них.

Френсис Хилл

Рис, 3.17. Коды вне/внутри для точки Мы формируем кодовое слово для каждой концевой точки тестируемого отрезка прямой. Условия тривиальных приема и отклонения легко связываются с этими кодовыми словами: О тривиальный прием: оба кодовых слова равны FFFF; О тривиальное отклонение: кодовые слова имеют Г в одном и том же месте, то есть обе точки находятся слева от окна или обе - справа и т. д.

Наделе формирование кодовых слов и тестирование может быть эффективно реализовано в C/C++ с использованием характерных для этих языков манипуляций с битами; мы покажем это в тематическом задании 3.3.

Разделение отрезка в случае, когда не имеет места ни тривиальный прием, ни тривиальное отклонение Алгоритм Кохена- Сазерленда использует стратегию «разделяй и властвуй». Если отрезок не может быть ни тривиально принят, ни тривиально отклонен, он разделяется на две части по разные стороны одной из границ окна. Одна его часть располагается вне окна и отбрасывается. Вторая часть является потенциально видимой, поэтому весь процесс повторяется с оставшимся отрезком относительно других границ окна. Вся эта процедура приводит к следующей стратегии:

do {

form the code words for pi and p2 II формируем кодовые слова для pi и р2

if (.trivial accept) return 1: // если (тривиальный прием), возвращаем 1

if (trivial reject) return 0: // если (тривиальное отклонение), возвращаем 0

Глава 3. Дополнительные инструменты для рисования


⇐ Предыдущая| |Следующая ⇒