Функции для многоугольников

Функция area вычисляет площадь многоугольника:

double area ( CCArrRef<Vector2d> & vert );

Знак площади зависит от направления обхода вершин. Для обхода против часовой стрелки площадь положительна.

Функция perimeter вычисляет периметр многоугольника, который всегда неотрицателен:

double perimeter ( CCArrRef<Vector2d> & vert );

Функция isConvex проверяет многоугольник на выпуклость:

bool isConvex ( CArrRef<Vector2d> vert );

Функция loopNumber подсчитывает количество оборотов совершаемое при обходе контура:

int loopNumber ( CArrRef<Vector2d> vert );

Это число будет положительным, если обход контура совершается против часовой стрелки и отрицательным, если по часовой стрелке. Если количество оборотов не равно 1 - значит на контуре есть петли. Обратное не всегда верно, т.к. петли могут обороты и добавлять, и убавлять.

Функции simplify упрощают многоугольники. Полученный многоугольник res состоит из вершин исходного многоугольника poly и отличается от него не более, чем на eps. Если параметр closed = false, то входной массив вершин считается незамкнутой ломаной. В этом случае первая и последняя точки будут сохранены:

DynArrRef<  nat   > & simplify ( CCArrRef<Vector2d> & poly, double eps, bool closed, DynArrRef<  nat   > & res );
DynArrRef<Vector2d> & simplify ( CCArrRef<Vector2d> & poly, double eps, bool closed, DynArrRef<Vector2d> & res );

Следующие функции упрощают многоугольники до заданного количества вершин ( nv ). Массивы poly и res должны быть разными:

DynArrRef<<  nat   > & simplifyNV ( CCArrRef<Vector2d> & poly, nat nv, bool closed, DynArrRef<  nat   > & res );
DynArrRef<<Vector2d> & simplifyNV ( CCArrRef<Vector2d> & poly, nat nv, bool closed, DynArrRef<Vector2d> & res );

Построение многоугольника по набору касательных. Параметр eps определяет расстояние, больше которого вершины не должны отклонятся от касательных:

DynArrRef & makePolygon ( CCArrRef<Line2d> & line, const double eps, DynArrRef<Vector2d> & poly );

Описание класса Vector2d находится здесь.
Описание шаблонов классов CArrRef и DynArrRef находится здесь.
Исходники алгоритмов находятся в файле func2d.cpp.

Наверх