Функция 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 Описание класса Vector2d находится здесь.
|