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

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

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





Рассмотрим отсечение отрезка 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. Нарушение авторских прав; Мы поможем в написании вашей работы!




Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


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


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Искусство подбора персонала. Как оценить человека за час Искусство подбора персонала. Как оценить человека за час...

Этапы творческого процесса в изобразительной деятельности По мнению многих авторов, возникновение творческого начала в детской художественной практике носит такой же поэтапный характер, как и процесс творчества у мастеров искусства...

Тема 5. Анализ количественного и качественного состава персонала Персонал является одним из важнейших факторов в организации. Его состояние и эффективное использование прямо влияет на конечные результаты хозяйственной деятельности организации.

Алгоритм выполнения манипуляции Приемы наружного акушерского исследования. Приемы Леопольда – Левицкого. Цель...

ИГРЫ НА ТАКТИЛЬНОЕ ВЗАИМОДЕЙСТВИЕ Методические рекомендации по проведению игр на тактильное взаимодействие...

Реформы П.А.Столыпина Сегодня уже никто не сомневается в том, что экономическая политика П...

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