Главная страница

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


Скачать 40.91 Kb.
НазваниеКак определить, что данный не самопересекающийся многоугольник выпуклый
Дата24.01.2022
Размер40.91 Kb.
Формат файлаdocx
Имя файлавыпуклый многоугольник.docx
ТипДокументы
#340520


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

Выпуклые многоугольники имеют следующие признаки:

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

  • Сумма внешних углов выпуклого многоугольника равна 360°;

  • Сумма углов выпуклого многоугольника равна (n - 2) * 180°;

  • Все внутренние углы многоугольника меньше 180°;

  • Все диагонали, связывающие вершины многоугольника, лежат внутри этого многоугольника;

  • Все углы многоугольника обходятся в одном направлении (Рисунок 1).



В КГ многоугольник будет выпуклым если при его обходе в каждой тройке последовательных вершин происходит поворот всегда в одну и ту же сторону. При обходе многоугольника против часовой стрелке поворот будет всегда налево, а при обходе по часовой - направо.

Многоугольник будет выпуклым, если для векторов, составляющих его периметр, выполняется условие: векторные произведение соседних векторов должны иметь одинаковый знак. В общем случае, произведение векторов в трехмерном пространстве находится по формуле:



Здесь i, j, k - орты декартовой системы (вектора единичной длины, сонаправленные с осями координат).
Однако, если мы рассматриваем вектора, лежащие в одной плоскости, то для этого случая z-составляющая векторов будет нулевой. Тогда наша формула вырождается в:



Таким образом, мы должны обойти все пары соседних сторон-векторов и посмотреть, все ли их произведения одного знака. (То есть все ли значения разности произведений (xi*yi+1-xi+1*yi) одного знака для всех i от 1 до N-1).

Исходя из этого мы можем составить следующий алгоритм:

Задаем N - количество вершин многоугольника

Задаем (вводим или присваиваем) все вершины многоугольника Pxi, Pyi для всех i от 1 до N.

Полагаем многоугольник выпуклым Q=true.

Вычисляем

Вычисляем Z=T/|T|,

где |T| - модуль числа Т.

Полагаем P=1

Для всех i от 1 до N-1 при условии, что Q=true вычисляем:

xi,yi

xi+1, yi+1

R=xi*yi+1-xi+1*yi

P=P*Z*R/|R|, здесь |R| - модуль числа R.

если P <0, то Q=false

Если Q=true - многоугольник выпуклый, иначе - нет.

Вычисление координат вектора, образованного сторонами многоугольника (xi, yi), хорошо производить в отдельной процедуре.

xi=Pxi+1-Pxi

yi=Pyi+1-Pyi

Для N-ой вершины N+1-ая будет, естественно, первой.


написать администратору сайта