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


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



ЗНАЕТЕ ЛИ ВЫ?

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



 

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

Si = | Ai Р1 Р2 |, I = 1, 2,..., n.

Значения n определителей Si могут быть больше, меньше нуля или равны ему. Все возможные сочетания этих значений разобьем на два случая.

Первый случай: все значения определителей Si имеют один знак или равны нулю, т.е. вершины расположены по одну сторону отрезка Р1Р2 или лежат на нем. При этом возможны следующие варианты.

Вариант 1. Все значения Si не равны нулю (Si 0) - отрезок полностью невидим (все вершины расположены по одну сторону отрезка и не соприкасаются с ним).

Вариант 2. Одно значение определителя Si равно нулю (Si = 0) - прямая, продолжающая отрезок Р1Р2, проходит через вершину Ai. В этом случае надо решить задачу принадлежности этой вершины отрезку Р1Р2 путем определения принадлежности вершины Ai внутренней области регулярного окна в виде прямоугольника, построенного на диагонали Р1Р2. Если она принадлежит отрезку, то у этого отрезка видимой является только точка Ai.

Вариант 3. Два значения определителя равны нулю (Si = 0 и Sj = 0) - прямая, продолжающая отрезок Р1Р2, совпадает с гранью ребра AiAj. Здесь необходимо исследовать взаимное расположение отрезка Р1Р2 и ребра AiAj. При этом возможны варианты полной видимости отрезка, когда

xmin (P1Р2) > xmin (AiAj) и xmax (P1Р2) < xmax (AiAj),

а также полной невидимости, когда либо

xmax (P1Р2) < xmin (AiAj),

либо

xmin (P1Р2) > xmax (AiAj).

В случае выполнения равенства, в приведенных выше условиях, будет видна только одна точка отрезка P1Р2 - точка P2 = Ai или точка P1 = Aj соответственно. Кроме этого, возможны и частичные перекрытия отрезков, что можно выяснить аналогичными сравнениями координат. Причем здесь приведен анализ точек по координатам x. Но можно выполнить исследования и по координатам y.

Второй случай: определители Si имеют разные знаки, т.е. прямая, продолжающая отрезок P1Р2, пересекает многоугольник. При этом пересечение возможно только в двух точках. Так как многоугольник выпуклый, то при последовательном обходе его вершин знаки определителей Si могут менять свое значение на противоположное только два раза. Пусть эта смена знака происходит для смежных пар вершин Aj и Aj +1, Ak и Ak+1 (рис. 3.8).

Для определения видимой части отрезка P1Р2 необходимо определить положение точек P1 и Р2 относительно отрезков AjAj +1, AkAk+1. Для этого требуется выполнить анализ четырех определителей при обходе ребер многоугольника по часовой стрелке:

S1j = | P1 Aj Aj+1 |, S2j = | P2 Aj Aj+1 |,

 

S1k = | P1 Ak Ak+1 |, S2k = | P2 Ak Ak+1 |.

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

Рассмотрение всех возможных сочетаний значений этих определителей дает 64 варианта (43). Исключение случая нахождения концевой точки отрезка на одном из ребер многоугольника существенно уменьшает число вариантов до 16. Однако практически достаточно рассмотреть только четыре из них. Рассмотрим эти варианты.

Вариант 1. Отрезок лежит вне многоугольника. В этом случае он полностью невидим. Данное расположение отрезка соответствует следующим сочетаниям знаков определителей:

  S1j S1k S2j S2k
Вариант 1.1. + - + -
Вариант 1.2. - + - +

Эти варианты показаны на рис. 3.9. Вариант 1.1 соответствует положению отрезка слева от многоугольника, а 1.2 - справа. Следует отметить, что ориентация отрезка на противоположное не влияет на результат его невидимости.

Вариант 2. Отрезок лежит полностью внутри многоугольника. В этом случае отрезок является полностью видимым (рис. 3.10.)

Знаки определителей будут иметь следующий вид:

 

  S1j S1k S2j S2k
Вариант 2.1. - - - -

Вариант 3. Точки P1, Р2 лежат по разные стороны многоугольника. В этом случае отрезок является частично видимым. Поэтому следует определить две точки пересечения отрезка с ребрами многоугольника. Видимая часть отрезка будет находиться между ними (рис. 3.11).

Знаки определителей для этого случая приводятся ниже. При этом изменение ориентации отрезка на противоположный дает такое же изменение знаков.

 

  S1j S1k S2j S2k
Вариант 3.1. + - - +
Вариант 3.2. - + + -

 

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

Знаки определителей для этих случаев имеют следующий вид:

  S1j S1k S2j S2k
Вариант 4.1. - + - -
Вариант 4.2. + - - -
Вариант 4.3. - - - +
Вариант 4.4. - - + -

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



Поделиться:


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

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