Алгоритм Кируса-Бека отсечения отрезка выпуклым многоугольником 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Алгоритм Кируса-Бека отсечения отрезка выпуклым многоугольником



Повышение быстродействия алгоритмов отсечения возможно за счет использования более эффективного метода определения местоположения точки отрезка относительно отсекающего окна. Такой метод заложен в алгоритме Кируса-Бека. Он использует для решения этой задачи вектор нормали к ребрам многоугольника. При этом выпуклый многоугольник представляется как область пересечений полуплоскостей, ограниченных прямыми, проходящими через ребра многоугольника (рис. 13).

Внутренней нормалью к ребру многоугольника называется единичный вектор перпендикулярный к этому ребру и направленный внутрь многоугольника. Обозначим внутреннюю нормаль ребра AiAi+1 через ni (I = 1,2,...,n). Если f - некоторая точка, лежащая на ребре многоугольника, n - внутренняя нормаль к этому ребру, а P - некоторая точка, полуплоскости, то знак скалярного произведения нормали и вектора из точки f в точку P определяет положение точки относительно грани, содержащей данное ребро (рис. 14).

V = n * (P - f).

Если взять точку f, совпадающую с вершиной многоугольника, то можно рассмотреть следующие три характерных случая расположения точки P, принадлежащей отрезку P1P2 (рис. 15).

Первый случай - угол между векторами n и (P-f) больше 900:

V = n * (P - f) < 0, > /2.

Второй случай - угол между векторами n и (P-f) равен 900:

V = n * (P - f) = 0, = /2.

Третий случай - угол между векторами n и (P-f) меньше 900:

V = n * (P - f) > 0, < /2.

Для построения алгоритма здесь используется параметрическая запись прямой, продолжающей отрезок P1P2.

P (t) = P1 + (P2 - P1) *t,

где t - параметр, определяющий положение точки на прямой.

При значениях

0 t 1

точка принадлежит отрезку P1P2. Если t < 0, то точка лежит левее точки P1, а при t > 1 - правее P2.

В соответствии с этим для точки пересечения прямой с ребром многоугольника (второй случай расположения точки P) можно вычислить параметр t, заменяя точку f на вершину многоугольника Ai:

ni *(P1 + (P2 - P1) *t - Ai) = 0.

Из этого выражения после преобразований получаем значение параметра.

t = .

Выполним анализ полученного выражения. Для этого рассмотрим случай равенства нулю знаменателя. Это возможно, когда P2 = P1 или же в случае расположения отрезка P1P2 параллельно ребру многоугольника (угол между векторами n и P1P2 равен /2). Совпадение точек концов отрезка дает вырожденный случай, который не входит в рассмотрение задачи отсечения отрезка. При параллельном расположении отрезка возможны три варианта его видимости, определяемые из анализа числителя:

  1. ni *(P1 - Ai) < 0. В этом случае точка P1 находится вне отсекающего многоугольника ( > /2), а следовательно, и точка P2; поэтому отрезок будет полностью невидимым;
  2. ni *(P1 - Ai) = 0. Точка P1 находится на границе отсекающего окна; значит отрезок лежит на грани данного ребра многоугольника, и для выделения видимой части отрезка следует найти общую часть отрезка и ребра;
  3. ni * (P1 - Ai) > 0. Точка P1 находится внутри отсекающего окна; в данном случае рассматриваемое ребро не влияет на видимость отрезка.

В случае неравенства нулю знаменателя, значение t дает точку пересечения прямой, продолжающей отрезок, и грани ребра. При значениях t < 0 или t > 1 точка пересечения находится за пределами отрезка P1P2. Тогда при t < 0 данное ребро не влияет на видимость отрезка (рис. 16).

При t > 1 отрезок полностью невидим, так как точка пересечения находится правее отрезка (рис. 17).

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

Рассмотрим теперь случай 0 t 1. Здесь также возможны два варианта (рис.18).

a) ni *(P2 - P1) > 0 b) ni *(P2 - P1) < 0

В первом случае (рис. 18a) видимым является отрезок PP2, во втором (рис. 18b) - отрезок PP1. По этому поводу говорят, что отрезок укорачивается снизу или сверху соответственно.

Прямая, продолжающая отрезок P1P2, может пересечь многоугольник только в двух местах. Однако решение уравнения для t относительно всех ребер даст множество решений в интервале 0 t 1, из которых следует выбрать необходимые. Для этого все решения разбиваются на две группы, которые называются нижней и верхней, в зависимости от того, к какой точке отрезка ближе расположено рассматриваемое решение - к началу или концу отрезка соответственно. После разбиения решений выделяют наибольшее значение из нижней группы tн, наименьшее - из верхней tв, которые рассматриваются, как возможные ограничения снизу и сверху. Если окажется, что tн > tв, то отрезок является полностью невидимым.



Поделиться:


Последнее изменение этой страницы: 2017-02-10; просмотров: 357; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.228.35 (0.005 с.)