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

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

double area ( CArrRef<Vector2d> vert );

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

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

double perimeter ( CArrRef<Vector2d> vert );

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

bool isConvex ( CArrRef<Vector2d> vert );

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

int loopNumber ( CArrRef<Vector2d> vert );

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

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

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

Первый параметр у всех функций - это ссылка на массив вершин многоугольника.

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

Наверх