Разбиение невыпуклых многоугольников
Пусть область невыпуклая:
- дополнить область, или разбить ее на выпуклые области.
Факт выпуклости или вогнутости определяется путем векторного произведения всех смежных сторон.
Рассмотрим знаки:
1. все знаки равны нулю - многоугольник вырождается в отрезок;
2. есть и “+” и “-” - многоугольник не выпуклый;
3. все неотрицательные - многоугольник выпуклый и все нормали ориентированны влево от контура;
4. все неположительные - многоугольник выпуклый и все нормали ориентированны вправо от контура.
Вычисление нормалей:
одна вершина выбирается, как базовая и все векторные произведения вычисляются относительно ее.
(vx1 vy2 - vy1 vx2 )k - векторное произведение v1 ,v2 .
n*vE = (nx *i + ny j)(vEx *i + vEx *j) = nx vEx + ny vEy + 0;
nx vEx = -hy vEy {ny = 1}
nx = -(vEy / vEx )*i + j
vi-1 и vi - вершины
vi-1 * vi > 0, то n - внутренняя нормаль, иначе - внешняя.
1. перенос начала координат в точку v1 ;
2. начинаем вращать фигуру так, чтобы любое ребро лежало на оси X
3. если Y вершины меньше нуля, то фигура невыпуклая и она отсекается соседями.
Дата добавления: 2014-01-07 ; Просмотров: 728 ; Нарушение авторских прав? ; Мы поможем в написании вашей работы!
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет