Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Пример. Алгоритм отсечения Сазерленда - Коэна.





Рассмотрим отсечение отрезка P1P2 окном, показанным на рис. 3. Коды концевых точек P1 (- 3/2, 1/6) и P2 (1/2, 3/2) равны (0001) и (1000) соответственно. Этот отрезок не является ни полностью видимым, ни тривиально невидимым.

Отрезок пересекает левую сторону окна. P1 - вне окна.

Пересечение с левой стороны (x = -1) окна происходит в точке P'1 (-1, 1/2). Замена P1 на P'1 дает новый отрезок от P1 (-1, 1/2) до P2 (1/2, 3/2).

Коды концевых точек P1 и P2 теперь стали (0000) и (1000). Отрезок не является ни полностью видимым, ни тривиально невидимым.

Отрезок не пересекается с правой стороной окна. Перейти к нижней стороне.

Коды концевых точек P1 и P2 остаются по-прежнему равными (0000) и (1000). Отрезок не является ни полностью видимым, ни тривиально невидимым.

Отрезок не пересекается с нижней стороной окна. Перейти к верхней.

Коды концевых точек P1 и P2 остаются равными (0000) и (1000). Отрезок не является ни полностью видимым, ни тривиально невидимым.

Отрезок не пересекается с верхней стороной окна. P1 - не снаружи окна. Поменяв P1 на P2 местами, получили новый отрезок от P1 (1/2, 3/2) до P2 (-1, 1/2).

Точка пересечение с верхней стороной окна (y = -1) равна P'1 (-1/4, 1). Заменив P1 на P'1, получаем новый отрезок от P1 (-1/4, 1) до P2 (-1, 1/2).

Теперь коды концевых точек P1 и P2 равны (0000) и (0000). Отрезок полностью видим.

Процедура завершена.

Начертить отрезок.

Алгоритм двумерного отсечения Сазерленда — Коэна:

Окно — массив 1 х 4, содержащий координаты (хл, хп, ун, ув) сторон окна

Рр Р2 — концевые точки отрезка с координатами (PjX, P,y) и (Р2х, Р2у) соответственно

Т1код, Т2код — массивы 1 х 4, содержащие коды точек Р, и Р2

Флаг — индикатор координатной ориентации отрезка, равный' — 1, при вертикальности, 0, при горизонтальности инициализация Флаг

Флаг = 1 проверка вертикальности и горизонтальности отрезка

if Р2х - Р,х = 0 then

Флаг = - 1

else

вычисление наклона

Наклон = (Р2у - Р,у)/(Р2х - Р,х)

if Наклон = 0 then Флаг = 0

end if

для каждой стороны окна

for i = 1 to 4

call Коэн (Р,, Р2, Окно; Видимость)

if Видимость = да then 2

if Видимость = нет then 3

проверка пересечения отрезка и стороны окна

if Т1кодE - i) = Т2кодE - i) thenl

проверка нахождения Р, вне окна; если Р} внутри окна, то

поменять Р, /./ Р2 местами

if Т1кодE - i) = 0 then

Раб = Р;

Pi = р2

Р2 = Раб

end if

поиск пересечений отрезка со сторонами окна выбор соответствующей подпрограммы вычисления пересечения контроль вертикальности отрезка

if Флаг < > - 1 и i ^ 2 then

Р,у = Наклон * (OkhOj — Р,х) + Р,у

Р,х = j

else

if Флаг < > 0 then

if Флаг < > -1 then

PjX = A/Наклон) * (Okhoj - P,y) + P,x

end if

P,y = Окно{

end if

end if

1 next i

начертить видимый отрезок

2 Draw P,P2

3 finish

подпрограмма определения видимости отрезка

subroutine Коэн (Р,, Р2, Окно; Видимость)

Р,, Р2 — концевые точки отрезка с координатами (Р,х, Р,у) и

(Р2х, Р2у) соответственно.

Окно — массив 1 х 4, содержащий координаты (хл, хп, ун, ув)

сторон окна

Видимость — признак видимости отрезка равный: «нет»,

«частично», «да», если отрезок соответственно:

полностью невидим, видим частично или полностью видим

вычисление кодов концевых точек отрезка

call Конец (Р,, Окно; Т1код, Сумма1)

call Конец (Р2, Окно; Т2код, Сумма2)

предположим, что отрезок частично видим

Видимость = частично

проверка полной видимости отрезка

if Сумма 1 = 0 и Сумма 2 = 0 then

Видимость = да

else

проверка тривиальной невидимости отрезка

call Логическое (Т1код, Т2код, Произвел)

if Произвел < > 0 then Видимость = нет

end if

отрезок может оказаться частично видимым

return

подпрограмма вычисления кодов концевой точки отрезка

subroutine Конец (Р, Окно; Ткод, Сумма)

Рх, Ру — координаты точки Р

Окно — массив 1x4, содержащий координаты (хл, хп, ун, ув)

сторон окна

Ткод — массив 1 х 4, содержащий коды концевой точки

Сумма — сумма всех элементов массива Ткод

вычисление кодов концевой точки

if Рх < хл then ТкодD) = 1 else ТкодD) = 0

if Рх > хп then Ткод(З) = 1 else Ткод(З) = 0

if ру < Ун tnen ТкодB) = 1 else ТкодB) = 0

if Ру > Ув then ТкодA) = 1 else ТкодA) = 0

вычисление суммы

Сумма = 0

for i = I to 4

Сумма = Сумма + ТкодО)

next i

return

подпрограмма вычисления логического произведения

subroutine Логическое (Т1код, Т2код; Произвел)

Т1код, Т2код — массивы 1 х 4, содержащие коды первой и второй концевых точек соответственно

Произвел — сумма побитовых логических произведений

Произвел = О

for i = 1 to 4

Произвел = Произвел + Целая часть ((Т1код@ + Т2кодО))/2)

next i

return

 







Дата добавления: 2015-10-01; просмотров: 854. Нарушение авторских прав; Мы поможем в написании вашей работы!




Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...


Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Конституционно-правовые нормы, их особенности и виды Характеристика отрасли права немыслима без уяснения особенностей составляющих ее норм...

Толкование Конституции Российской Федерации: виды, способы, юридическое значение Толкование права – это специальный вид юридической деятельности по раскрытию смыслового содержания правовых норм, необходимый в процессе как законотворчества, так и реализации права...

Значення творчості Г.Сковороди для розвитку української культури Важливий внесок в історію всієї духовної культури українського народу та її барокової літературно-філософської традиції зробив, зокрема, Григорій Савич Сковорода (1722—1794 pp...

Броматометрия и бромометрия Броматометрический метод основан на окислении вос­становителей броматом калия в кислой среде...

Метод Фольгарда (роданометрия или тиоцианатометрия) Метод Фольгарда основан на применении в качестве осадителя титрованного раствора, содержащего роданид-ионы SCN...

Потенциометрия. Потенциометрическое определение рН растворов Потенциометрия - это электрохимический метод иссле­дования и анализа веществ, основанный на зависимости равновесного электродного потенциала Е от активности (концентрации) определяемого вещества в исследуемом рас­творе...

Studopedia.info - Студопедия - 2014-2025 год . (0.009 сек.) русская версия | украинская версия