В этом посте мы ищем алгоритмы / идеи о том, как найти прямоугольник максимальной площади внутри выпуклого многоугольника .
На следующем рисунке числа - это площади подогнанных прямоугольников. Как показано, желаемый прямоугольник может варьироваться в каждом измерении и может быть под любым углом.
Редактировать:
У нас нет четкого представления о том, как бороться с упомянутой проблемой, поэтому мы задали этот вопрос здесь. Тем не менее, мы предполагаем, что прямоугольник с максимальной площадью может быть одним из тех, у которых одно ребро выровнено по краю (конечно, не обязательно по длине одинаковой длины) ребра многоугольника.
Python
будет включено,Fortran
если потребуется. У нас есть предположение , что , основываясь на нашем предыдущем посте здесь также упоминалось выше,whuber
это может быть прямоугольник с краем общего с полигона будет ответ.Ответы:
Некоторые заметки слишком велики, чтобы помещать их в комментарии (хотя это не предполагает очевидного алгоритма):
Штриховая линия (РЕДАКТИРОВАНИЕ) : По крайней мере две вершины прямоугольника максимальной площади должны лежать на границе многоугольника (то есть вдоль края или в вершине). И если прямоугольник максимальной площади не является квадратом, то по крайней мере три вершины должны лежать на границе многоугольника.
Я доказал это себе в четыре этапа:
Примечание № 1 : По крайней мере одна вершина прямоугольника максимальной площади всегда будет лежать на границе многоугольника. Это довольно очевидно, но доказательство может выглядеть следующим образом (противоречие): предположим, у вас был «максимальный» прямоугольник без вершины на границе многоугольника. Это означает, что вокруг каждой его вершины будет хотя бы небольшое пространство. Таким образом, вы можете немного расширить свой прямоугольник, что противоречит его максимальности.
Примечание № 2 : По крайней мере две вершины прямоугольника максимальной площади всегда будут лежать на границе многоугольника. Доказательство может выглядеть следующим образом (опять противоречие). Предположим, у вас был «максимальный» прямоугольник с единственной вершиной на границе (гарантируется примечанием № 1). Рассмотрим два ребра, не смежные с этой вершиной. Поскольку их конечные точки НЕ находятся на границе, вокруг каждого есть небольшое пространство. Таким образом, любой из этих ребер можно немного «выдавливать», расширяя площадь многоугольника и противореча его максимальности.
Примечание № 3 : Есть две противоположные по диагонали вершины прямоугольника максимальной площади, которые лежат на границе многоугольника. (Мы знаем из примечания № 2, что есть по крайней мере два, но не обязательно, что они находятся напротив друг друга.) Но опять-таки из-за противоречия, если только две граничные вершины были смежными, то противоположный край (ни одна из вершин которого находятся на границе), может немного выдавливаться, увеличивая площадь прямоугольника и противореча его максимальности.
Примечание № 4 : (ИЗМЕНЕНО). Если прямоугольник максимальной площади не является квадратом, то три его вершины будут лежать на границе многоугольника.
Для доказательства предположим, что это не так, то есть прямоугольник максимальной площади не является квадратом, а только две его вершины находятся на границе многоугольника. Я покажу, как построить больший прямоугольник, противоречащий максимальности.
Назовите вершины прямоугольника
A
,B
,C
, иD
. Без ограничения общности предположим, чтоB
иD
те два, которые находятся на границе многоугольника. ТакA
иC
находятся на внутренней стороне многоугольника, есть какой - то пространство для маневра вокруг них (представлен с кругами вокругA
иC
в картине ниже). Теперь нарисуйте круг вокруг прямоугольника, и сдвиньте точкиA
иC
немного вокруг круга на одинаковую величину (чтобы сделатьA'
иC'
, как показано ниже), чтобы новый прямоугольникA'BC'D
является более квадратным, чем исходный прямоугольник. Этот процесс создает новый прямоугольник, который также находится внутри исходного многоугольника и имеет большую площадь. Это противоречие, поэтому доказательство сделано.Чтобы верить этому доказательству, вы должны убедить себя в том, что площадь прямоугольника, вписанного в круг, увеличивается, когда он становится «более квадратным» (т. Е. Разница между длинами ребер уменьшается). Вам также нужно, чтобы многоугольник был выпуклым, чтобы все новые линии были внутри него. И, возможно, есть и другие мелкие детали, скрывающиеся под ковром, но я уверен, что все они сработают.
источник
Я сделал очень быстрый и отвратительный набросок о вашей зеленой заметке в вопросе. Я не мог опубликовать его как комментарий, поэтому мне пришлось написать ответ, даже если он не один.
Я считаю, что на изображении ниже у нас есть прямоугольник с максимальной площадью (не идеальный, это просто эскиз, сделанный на Paint, чтобы дать идею), и я не думаю, что вы можете найти больший, который будет иметь общую сторону с границы черного плигона ...
Однако я могу ошибаться, в этом случае у вас есть все мои извинения.
источник
Большинство других алгоритмов находят максимальную площадь прямолинейного прямоугольника, вписанного в выпуклый многоугольник, и имеют сложность
O(log n)
. Я не думаю, что вы предполагаете, что многоугольник максимальной площади выровнен с одной из сторон, является правильным, потому что все, что вам нужно сделать, это повернуть время многоугольникаn
, что приведет к сложностиO(n log n)
, и в моем кратком исследовании я не смог найти что-нибудь, сказав, что это было так просто.Тем не менее, в статье Knauer et al. Самые большие вписанные прямоугольники в выпуклых многоугольниках . al., описывает алгоритм аппроксимации, который приблизит вас к правильному ответу.
Насколько я понимаю, алгоритм строится поверх одного из известных многоугольников, выровненных по оси, а затем случайным образом выбирает точки в пространстве многоугольника, генерирует несколько осей из этих случайных выборок, выполняет итерации по этой оси и применяет ось. выровненный алгоритм для каждого, а затем возвращает самый большой прямоугольник в этом наборе.
источник