Warning: Inaccurate algorithm, may depend on the location of the points
- Minimum: O(N^3)
- Worse: O(N^6)
Из всех точек полигона создаём ненакладывающиеся лучи по осям X и Y:
Ищем точки пересечений лучей и сторон полигона, создаём из этих точек аналогичные лучи по X и Y, и повторяем, пока будут ненакладывающиеся.
Теперь нужно найти прямоугольники, которые лежат внутри полигона целиком. Для этого создадим триангуляцию полигона. Проверим каждый прямоугольник - его вершины должны принадлежать какому-либо треугольнику.
Находим максимальную прямоугольную сумму площадей вложенных прямоугольников
- Depends on the position of the points, it may not find the largest area.
- Polygon must not self-intersected and have holes
- https://github.com/mapbox/earcut.hpp
- For run example: Qt and OpenCV
#include "inscribedmaxarearect.h"
...
std::vector<Geometry::Point> polygonForFind = { {(int) X, (int) Y}, ... };
InscribedMaxAreaRect IMAR(polygonForFind);
if ( IMAR.findMaxAreaInscribedRect() ) {
Geometry::Rect maxAreaInscribedRect = IMAR.inscribedMaxAreaRect();
...
}
...MIT





