凸多角形内の最大面積長方形を見つける方法は?


21

この投稿では凸多角形内で最大面積長方形を見つける方法に関するアルゴリズム / アイデアを探しています

次の図で、数字はフィットされた長方形の面積です。示されているように、望ましい長方形は各次元で異なり、任意の角度にすることができます。

編集:

言及された問題に対処する方法が明確にわからないため、ここで質問しました。それでも、maximum-area-rectangle は、ポリゴンのエッジ上に1つのエッジが(必ずしも同じ長さのエッジである必要はありませんが)配置されているものの1つであると推測れます。

ここに画像の説明を入力してください


1
使用しているソフトウェアを指定できますか?また、ここまであなたの仕事を投稿するか、これを解決するためにあなたが取り組んだ一般的なアプローチを投稿してください。誰かがあなたがすでにやったことを改善できるかもしれません。私の経験では、単に「すぐに」質問を投稿するよりもはるかに有用な回答が得られます。
マーティン


@Martin Software:Pythonその後のプログラミングは、Fortran必要に応じて行われます。私達は私達の前のポストに基づいていることを推測していここにもで上記のwhuberことが答えになるポリゴンと共通のエッジを持つ矩形てもよいです。
開発者

1
あなたの問題は本当に興味深いもので、ここここで解くアルゴリズムを見つけることができたと思います
ニックス

1
@nickvesリンクをありがとう。これらの情報を、アルゴリズムの簡単な説明とともに答えとしてください。受け入れられるのは潜在的に良い答えでしょう。
開発者

回答:


4

コメントに入れるには大きすぎるメモもあります(ただし、これは明らかなアルゴリズムを示唆していません)。

パンチライン(編集済み):最大面積の長方形の少なくとも2つの頂点は、ポリゴンの境界上(エッジに沿って、または頂点に)ある必要があります。最大面積の長方形が正方形でない場合、少なくとも3つの頂点がポリゴンの境界上になければなりません。

私は4つのステップでそれを自分自身に証明しました:

注#1:最大面積の長方形の少なくとも1つの頂点は、常にポリゴンの境界上にあります。これは非常に明白ですが、証明は次のようになります(矛盾により)。多角形の境界に頂点のない「最大の」長方形があるとします。つまり、各頂点の周囲に少なくとも少しのスペースがあります。したがって、長方形を少し広げて、その最大性に矛盾する可能性があります。

注#2:少なくとも2つ最大面積の長方形の頂点は、常にポリゴンの境界上にあります。証明は次のようになります(これも矛盾です):境界に頂点が1つしかない「最大」長方形があるとします(注#1で保証)。その頂点に隣接していない2つのエッジを考慮してください。それらのエンドポイントは境界上にないため、それぞれの周りに小さなスペースがあります。そのため、これらのエッジのいずれかを少し「押し出す」ことで、ポリゴンの領域を拡大し、その最大性に矛盾する可能性があります。

注#3:多角形の境界上にある最大面積の長方形の対角線上に 2つの頂点があります。(注#2から、少なくとも2つあることはわかっていますが、必ずしも互いに向かい合っているわけではありません。)しかし、矛盾によって、2つの境界頂点のみが隣接している場合、反対側のエッジ(どちらの頂点も境界上にある)を少し押し出して、長方形の面積を増やし、その最大性に矛盾する可能性があります。

注#4:(編集済み)最大面積の長方形が正方形でない場合、3つの頂点がポリゴンの境界上にあります。

証明するために、そうではない、つまり最大面積の長方形が正方形ではなく、その頂点のうち2つだけがポリゴンの境界上にあると仮定します。最大値と矛盾する、より大きな長方形を作成する方法を示します。

長方形の頂点を呼び出しABC、とD。一般性を失うことなく、BDがポリゴンの境界上にあると仮定します。以来ACポリゴンの内側にある、(周りの円で表され、それらの周りのいくつかの余地がありますAし、C下の画像では)。今長方形の周りに円を描き、スライドポイントAC(作るために同じ量だけ少し円の周りA'C'その新しい四角形ことを、下図)A'BC'D元の長方形よりも正方形です。このプロセスは、元のポリゴン内にあり、より大きな面積を持つ新しい長方形を作成します。これは矛盾であるため、証明が行われます。

新しい長方形の作成

その証明を信じるには、円に内接する長方形の面積が「正方形」になるにつれて増加する(つまり、エッジの長さの差が小さくなる)ことを確信する必要があります。また、多角形を凸状にして、新しい線がすべてその中にくるようにする必要があります。そしておそらく他の小さな詳細が敷物の下に流されていますが、私はそれらがすべてうまくいくと確信しています。


注#4は、他の2つの頂点を「くねらせ」て長方形を作成しないため、怪しいです。
whuber

本当です。ただし、4番目の例の視覚化は正しくありません(2つの頂点がポリゴンの境界上にある場合、それ以上ストレッチすることはできません)。私はそれを説明する方法を正確に見つけることができません(コメントを書いてみましたが、面倒になりすぎました)が、私はあなたが正しいと信じています。
サリーク

注4には反例があると思います。しかし、私が見つけたものは、いくつかの複雑な計算を示して表示します。最も単純なのは、不規則な六角形(2つの反対側の角がわずかに切り取られた正方形)の摂動です。
whuber

注#4は怪しいことに同意しました。今晩詳しく調べて、修正するか削除します。
csd

+1それは難易度の良い解決策です。編集してくれてありがとう!
whuber

3

質問のあなたの緑色のメモについて、非常に迅速で恐ろしいスケッチをしました。コメントとして投稿できなかったので、たとえそうでなくても答えを書く必要がありました。
下の画像では、最大面積の長方形(完璧ではない、アイデアを与えるためにペイントで作られた単なるスケッチです)があると信じています。黒い多角形の境界線...
しかし、私は間違っている可能性があります。その場合、あなたは私の謝罪をすべて持っています。
ペイントで作成したクイックスケッチ


3
良い点(+1)。ただし、はるかに単純な反例があります。通常の八角形内に最大面積の長方形を内接させる問題を考えてください。八角形の外接円内で最大の正方形を最初に見つけることで、簡単にわかります(また、八角形の交互の頂点とソリューションのコーナーが一致すること、およびこのソリューションがエッジに位置合わせされた内接する長方形よりも大幅に大きいことがわかります)。
whuber

実際(今のところ大きな疑問があります)、このポリゴンの外側の最小の長方形(この投稿からのもの)は、辺の1つと同じ方向になっていませんか?(私はそれが私の赤い長方形と同じ向きに見えるだろう)
サリーク

3
ちなみに、そのポリゴンは凸面ではありません。元の質問は、凸多角形に制限されています。
csd

2
@csdそれは素晴らしい点ですが、私の反例が示すように、サリークはまだ正しいです。Saryk、最小領域境界長方形には問題はありません。凸包の側面を含める必要があることを(厳密に)簡単に証明できます。(凸多角形の)最大面積内接長方形には、境界に接する2つの頂点があればよく、それ以上は必要ありません。
whuber

2

他のほとんどのアルゴリズムは、凸多角形に内接する最大面積の直線長方形を見つけ、複雑さはであるO(log n)。最大面積ポリゴンが辺の1つと整列しているとは思わないでしょう。なぜなら、ポリゴンを回転させるだけnで、の複雑さが生じO(n log n)、私の簡単な研究ではそれができなかったからです。それがそんなに簡単だったと言う何かを見つけます。

ただし、Knauer等の論文「多角形の最大内接長方形」等は、あなたを正しい答えに近づける近似アルゴリズムを説明しています。

アルゴリズムを理解する限りでは、既知の軸に沿った最大面積ポリゴンの1つの上に構築され、次に、ポリオン空間内のポイントをランダムにサンプリングし、それらのランダムサンプルから複数の軸を生成し、それらの軸を反復して、軸を適用しますアルゴリズムを各アルゴリズムに合わせて、そのセットの最大の長方形を返します。


おそらく最初の文にタイプミスがありますか?O(log(n))アルゴリズムを使用することはできません。座標の読み取りだけがO(n)操作であるためです。
whuber

リンクは死んでいる
危険な

1
@dangerousdave-長く続く代替リンクを見つけました
。...-lreeder
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.