Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по КГ.doc
Скачиваний:
5
Добавлен:
27.04.2019
Размер:
1.17 Mб
Скачать

Двумерное отсечение. Простой алгоритм определения видимости.

В этом алгоритме отрезок отсекается поочередно каждой из сторон окна, а для полученных точек пересечения проверяется их принадлежность внутренней области окна, т. е. корректность пересечения. Эта процедура применяется сначала к исходному отрезку Р1Р2 и получается отрезок Р12, а затем к отрезку Р12 и получается результирующий отрезок Р12'. 1. Вычисление кодов концевых точек отрезка. 2. Занесение этих кодов в 2 массива, размерностью 1х4 каждый. 3. Проверка полной видимости отрезка. Если отрезок полностью видим goto 13. 4. Проверка тривиальной невидимости отрезка. Если отрезок полностью невидим goto 13. 5. Отрезок может быть частично видим. Проверяется попадание концевых точек отрезка внутрь окна. Если концевые точки внутри окна есть, goto 8. 6. Внутри окна нет концов отрезка. 7. Инициализация номера конца отрезка. Если обработано оба конца отрезка, goto 13. 8. Проверяется вертикальность отрезка. Если отрезкок вертикален, goto 11. 9. Ищутся точки пересечения отрезка с левым и правым краями окна. Если пересечение обнаружено, goto 7. 10. Проверяется горизонтальность отрезка. Если отрезок горизонтален, goto 7. 11. Проверяется пересечение отрезка с верхним и нижним краями окна. Если пересечение обнаружено, goto 7. 12. Если пересечений не обнаружено, то отрезок невидим. 13. Завершение работы и вызов процедуры черчения. 14. Перейти к обработке следующего отрезка.

В алгоритме Сазерленда-Коэна отрезок тоже разбивается сторонами окна. Отличие состоит в том, что здесь не производится проверки попадания точки пересечения внутрь окна, вместо этого каждая из пары получающихся частей отрезка сохраняется или отбрасывается в результате анализа кодов ее концевых точек. Для определения той из девяти областей, которой принадлежит конец ребра, вводится четырехразрядный (битовый) код. Крайний правый бит кода считается первым. В соответствующий бит заносится 1 при выполнении следующих условий: для первого бита - если точка левее окна для второго бита - если точка правее окна для третьего бита - если точка ниже окна для четвертого бита - если точка выше окна В противном случае в бит заносится нуль. Ключом к алгоритму Сазерленда-Коэна является информация о том, что одна из концевых точек отрезка лежит вне окна. Поэтому тот отрезок, который заключен между этой точкой и точкой пересечения, можно отвергнуть как невидимый. Фактически это означает замену исходной концевой точки на точку пересечения. В содержательных понятиях алгоритм Сазерленда - Коэна формулируется следующим образом: Для каждой стороны окна выполнить: 1. Для каждого отрезка Р1P2 определить, не является ли он полностью видимым или может быть тривиально отвергнут как невидимый. 2. Если Р1 вне окна, то продолжить выполнение, иначе поменять Р1 и Р2 местами. 3. Заменить Р1 на точку пересечения Р1Р2 со стороной окна.