Многоугольники задаются массивами вершин. Обход вершин должен быть против часовой стрелки.
Def<Conform2d> maxPolygonInConvexPolygon ( CCArrRef<Vector2d> & inner, CCArrRef<Vector2d> & outer );Ответ получатся в виде ортогонального преобразования, которое надо применить к вершинам внутреннего многоугольника ( inner ), чтобы получить оптимальное положение. Следующая функция делает то же самое, но без вращения: Def<Conform2d> maxPolygonInConvexPolygonNR ( CCArrRef<Vector2d> & inner, CCArrRef<Vector2d> & outer );• Максимальный по площади прямоугольник: Def<Rectangle2d> maxRectangleInConvexPolygonA ( CCArrRef<Vector2d> & poly );Следующая функция делает то же самое, но без вращения: Def<Rectangle2d> maxRectangleInConvexPolygonANR ( CCArrRef<Vector2d> & poly );• Максимальный ромб ( A - максимум площади, P - максимум периметра ): Def<Rhombus2d> maxRhombusInConvexPolygonA ( CCArrRef<Vector2d> & poly ); Def<Rhombus2d> maxRhombusInConvexPolygonP ( CCArrRef<Vector2d> & poly );Без вращения: Def<Rhombus2d> maxRhombusInConvexPolygonANR ( CCArrRef<Vector2d> & outer );• Максимальный параллелограмм ( A - максимум площади, P - максимум периметра ): Def<Parallelogram2d> maxParallelogramInConvexPolygonA ( CCArrRef<Vector2d> & poly ); Def<Parallelogram2d> maxParallelogramInConvexPolygonP ( CCArrRef<Vector2d> & poly );• Максимальный по площади треугольник: Def<Triangle2d> maxTriangleInConvexPolygonA ( CCArrRef<Vector2d> & poly );Этот алгоритм перебирает все тройки вершин многоугольника и выбирает из них лучшую. • Максимальный по площади четырёхугольник: bool maxQuadInConvexPolygonA ( FixArrRef<Vector2d, 4> & quad, CCArrRef<Vector2d> & poly );Фиксированный массив из 4-х элементов quad в случае успешного завершения будет содержать координаты вершин вписанного четырёхугольника. Этот алгоритм перебирает все четвёрки вершин многоугольника и выбирает из них лучшую. • Максимальный по площади N-угольник: bool maxNgonInConvexPolygonA ( ArrRef<Vector2d> & inner, CCArrRef<Vector2d> & outer );Массив из N элементов inner в случае успешного завершения будет содержать координаты вершин вписанного N-угольника. Этот алгоритм не всегда даёт оптимальное решение. В приложении DEMO можно посмотреть примеры использования этих функций.
Описание класса Vector2d смотрите в разделе Вектора на плоскости.
|