Популярные услуги

Все письменные КМ под ключ за 7 суток! (КМ-1 + КМ-2 + КМ-3 + КМ-4 + КМ-5)
КМ-6. Динамические массивы. Семинар - выполню любой вариант!
КМ-2. Разработка простейших консольных программ с использованием ООП + КМ-4. Более сложные элементы ООП - под ключ!
Оба семинара по программированию под ключ! КМ-2. Разработка циклических алгоритмов + КМ-3. Функции и многофайловые программы в Си
Одно любое задание в mYsql
Любая задача на C/C++
Сделаю ваше задание: Лабораторная работа на Pascal / Lazarus
Любой тест по базам данных максимально быстро на хорошую оценку - или верну деньги!
Любой реферат по объектно-ориентированному программированию (ООП)
Повышение уникальности твоей работе

Отсечение прямоугольным окном

2021-03-09СтудИзба

Отсечение прямоугольным окном. Алгоритм Сазерленда-Коуэна.

В рассматриваемом отсечении окно представляет собой прямоугольник, стороны которого параллельны осям координат, как это показано на приведенном рисунке (Рис. 3.1‑1).

 При внутреннем отсечении отображаются только те фрагменты отсекаемой фигуры, которые попадают во внутреннюю область окна, а все остальные отбрасываются. Для приведенного на рисунке окна у треугольника АВС отбрасывается часть Bp1p2 и треугольник отображается своей частью АР1Р2С.

При внешнем отсечении отображается лишь то, что оказывается вне окна.

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


Рис. 3.11

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

Математически задача довольно-таки проста: нужно найти точки пересечения отсекаемого отрезка со сторонами окна.

Рекомендуемые материалы

 Пересечение отрезка, заданного начальной   Н(xн,yн) и конечной К(xк,yк)  точками, с вертикальной (например, левой) стороной ищется следующим образом (Рис. 3.1‑2 а), где точка пересечения обозначена как «П»):

xп  =  xл,

(yп - yН)/(yк- yН) = (xл – xН)/(xк – xН), откуда:

yп  = yН+ (xл –xН) m, где  крутизна отрезка m = (yк- yН)/(xк – xН).

 Пересечение  этого отрезка с горизонтальной (например, верхней) стороной ищется как:

yп =  yв,

(xп - xН)/(xк  - xН) = (yв – yН)/(yк – yН), откуда:

xп = xН + (yв – yН)(1/m).

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

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

Для быстрого анализа видимости отрезка в этом алгоритме используется кодирование  концов отрезка. Для этого пространство, в котором находится  окно, разбивается на девять областей, как это показано на рисунке (Рис. 3.1‑2).

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

Если точка лежит по отношению к некоторой стороны окна во внутренней области, то в соответствующий разряд четырех битового кода устанавливается ноль, в противном случае в этот разряд устанавливается единица. При кодировании концевым точкам приписывается код области, в которой они находится. Например, на Рис. 3.1‑2а) точка А по отношению к


 

 

                          а)                                                            в)

Рис. 3.12

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

Используя описанную кодировку, можно утверждать, что полностью видимый отрезок должен имеет нулевые коды для обоих своих концов. С другой стороны, если оба конца отрезка располагаются с внешней стороны по отношению хотя бы одной стороны окна, то он полностью невидим. Обращает на себя внимание тот факт, что логическое произведение кодов концов отрезка в этом случае будет отлично от нуля.

На Рис. 3.1‑3 а) приведено несколько отрезков, расположенных в пространстве с окном, а на Рис. 3.1‑3 b) приведены в виде таблицы кодировка концов всех имеющихся отрезков и результаты анализа их видимости.

Идея алгоритма Сазерленда-Коуэна заключается в следующем.

Сначала кодируются концы  отрезка и проверяется наличие его явной видимости (отрезок полностью видим или очевидно не видим). Если признаков явной видимости нет, то поочередно ищется пересечение отрезка с линией, несущей одно из ребер окна. При этом перед поиском пересечения отрезок ориентируется таким образом, чтобы его начало находилось с внешней стороны относительно линии, несущей текущую сторону (ребро). Пересечение ищется только в том случае, когда концы отрезка располагаются по разные стороны от текущего ребра окна.

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

Рис. 3.13

Если точка пересечения найдена, то начало отрезка перемещается в эту точку, точка нового начала отрезка кодируется и осуществляется анализ наличия очевидной видимости полученного нового отрезка. Если  видимость отрезка не очевидна, то процедура повторяется для очередного ребра окна и т.д.

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

На следующем рисунке(Рис. 3.1‑4)  приведена последовательность операций с отрезком.


 

Рис. 3.14

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

С  линией, несущей левое ребро, отрезок не пересекается, поэтому осуществляется переход к следующему правому ребру.

Отрезок пересекается с линией, несущей правое ребро, но его начало располагается с внутренней стороны от этого ребра, поэтому начало и конец отрезка меняются местами  и ищется пересечение линии, несущей отрезок Рн1, Рк1 и линии, несущей правое ребро окна.  Начало отрезка переносится в найденную точку пересечения.

 Вновь полученный отрезок Рн2, Р к2     имеет неочевидную видимость, поэтому осуществляется переход к определению пересечения отрезка с очередным (нижним) ребром. Начало и конец меняются местами и для вновь образованного отрезка Рн3, Р к3    находится точка его пересечения с нижним ребром. В эту точку переносится начало отрезка и анализируется видимость вновь полученного отрезка  Рн4, Р к4 .

Отрезок Рн4, Рк4    будет полностью видим, задача считается решенной и часть Рн4, Рк4   исходного отрезка Рн, Рк  отображается на носителе.

Граф-схема алгоритма Сазерленда-Коуэна приведена на (Рис. 3.1‑5 иРис. 3.1‑6).

На граф-схеме приняты следующие обозначения.

- Pн, Pк – двух элементная матрица координат начальной и конечной точек отрезка, нулевые элементы которых содержит координаты X, а первые элементы – координаты Y конечных точек;

- О – четырех элементная матрица, задающее положение отсекающего окна, причем в ее нулевом, первом, втором и третьем элементах, располагаются координаты, определяющие положение, соответственно, левого, правого, нижнего и верхнего ребер заданного окна;

- Kн, Kк – четырех элементные бинарные матрицы, содержащие коды точек, соответственно,    конца и начала  отрезка, причем в их нулевом,

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

- J – номер текущего ребра заданного окна;

- В – функция очевидной видимости отрезка, которой может быть приписано одно из трех значений:

- 1 – если отрезок полностью видим;

- 0- если отрезок полностью невидим;

- 2 – если видимость отрезка неочевидна;


Рис. 3.15

- F – переменная, определяющая  вид отрезка, которая приписывается значение «1», если отрезок вертикальный, и «0» во всех остальных случаях;

- m - крутизна отрезка.


Рис. 3.16

Блок операторов 1 граф–схемы выполняет кодировку концов отрезка (подпрограммы Rut1) и определяет переменную очевидной видимости B (подпрограммы Rut2).

Блок 2 на основании значения В или отображает отрезок, или заканчивает задачу (отрезок очевидно видим или очевидно не видим), или переходит к процессу поиска пересечения отрезка с очередного ребром j с предварительно сориентированным отрезком.

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

Блок 4 осуществляет расчет точки пересечения для вертикальных ребер окна.

Блок 5 осуществляет расчет точки пересечения для горизонтальных ребер окна.

Блок 6 отображает отрезок или его видимую часть и завершает решение задачи.

На Рис. 3.1‑7 приведена граф-схема подпрограммы Rut1(j,O,P;K), обеспечивающей формирование четырех битового кода K1 для точки P, в зависимости от параметров окна, параметры которые заданы матрицей О.

Входными параметрами данной подпрограммы являются параметры окна (четырех элементная матрица О), матриц координат кодируемой точки, и номер ребра j окна, начиная с которого будет выполняться кодировка. На выходе подпрограмма формирует элементы бинарной матрицы кода заданной точки.

 

Рекомендуем посмотреть лекцию "12 Файлы".

Рис. 3.17

В алгоритме, приведенном наРис. 3.1‑5, на первую подпрограмму Rut1(j,O,P;K) подается матрица координат конечной точки отрезка, а сформированный ею код  используется как код конца отрезка.

На вторую подпрограмму Rut1(j,O,P;K) подается матрица координат начальной точки отрезка, а сформированный ею код  используется как код начала отрезка.

На Рис. 3.1‑8 приведена граф-схема подпрограммы Rut2(Kнк;В), обеспечивающей на основании кодов Кн, Кк формирование значение для функции В видимости этого  отрезка.


Рис. 3.18

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5138
Авторов
на СтудИзбе
443
Средний доход
с одного платного файла
Обучение Подробнее