Максимальный многоугольник вписанный
в невыпуклый многоугольник

Многоугольники задаются массивами вершин. Обход вершин должен быть против часовой стрелки.

• Максимальный выпуклый многоугольник ( inner ) вписанный в другой многоугольник ( outer ):

Def<Conform2d> maxConvexPolygonInPolygon ( CCArrRef<Vector2d> & inner, CCArrRef<Vector2d> & outer );
Ответ получатся в виде ортогонального преобразования, которое надо применить к вершинам внутреннего многоугольника ( inner ), чтобы получить его оптимальное положение.
Следующая функция делает то же самое, но без вращения:
Def<Conform2d> maxConvexPolygonInPolygonNR ( CCArrRef<Vector2d> & inner, CCArrRef<Vector2d> & outer );
• Максимальный по площади прямоугольник:
Def<Rectangle2d> maxRectangleInPolygonA ( CCArrRef<Vector2d> & poly );
Следующая функция делает то же самое, но без вращения:
Def<Rectangle2d> maxRectangleInPolygonANR ( CCArrRef<Vector2d> & poly );
• Максимальный ромб ( A - максимум площади, P - максимум периметра ):
Def<Rhombus2d> maxRhombusInPolygonA ( CCArrRef<Vector2d> & poly );
Def<Rhombus2d> maxRhombusInPolygonP ( CCArrRef<Vector2d> & poly );
Следующая функция делает то же самое, но без вращения:
Def<Rhombus2d> maxRhombusInPolygonANR ( CCArrRef<Vector2d> & poly );

В приложении DEMO можно посмотреть примеры использования этих функций.

Описание класса Vector2d смотрите в разделе Вектора на плоскости.
Описание класса Conform2d смотрите в разделе Преобразования на плоскости.
Описание шаблона CCArrRef смотрите в разделе Массивы.
Описание шаблона классов Def смотрите в разделе здесь.
Описание классов Rhombus2d и Rectangle2d находится здесь.
Исходники алгоритмов находятся в файле opti2d_4.cpp.

Наверх