多角形を別の多角形の内側にパックする方法は?


20

エッジを縫い合わせてジャグリングボールを作りたい革シートをいくつか注文しました。ボールの形状にプラトンの立体を使用しています。

革のシートをスキャンして、革のシートの形状に近いポリゴンを生成できます(ご存知のように、動物の皮であり、長方形ではありません)。

それで、ジャグリングボールのサイズを最大化したいと思います。

私の例では、ポリゴンは通常のものですが、単純なポリゴンを使用したソリューションを探しています。

すべてがシート内に収まるようにポリゴンに適用できる最大のスケールファクターは何ですか?

できるだけ多くの材料を使用して、無駄を最小限に抑えようとしています。

明らかに、多面体ネットを個々の多角形にカットすると、可能な組み合わせのスペースが増加しますが、最終的なジオメトリの品質も低下します。これは、縫製が多く、エラーが蓄積されるためです。しかし、この質問は、多面体を展開するさまざまな方法を列挙することではありません。それらは独立して考えることができます。したがって、ポリゴンは単純なポリゴンです。

正式に:

入力:

  • P:単純なポリゴン(ターゲット)
  • S:配置したいポリゴンのセット
  • G:単純なポリゴンのグラフ-各ノードは単純なポリゴンを表し、共通のエッジを共有するポリゴンの各ペア間に1つのエッジエッジがあります SnS
  • α>=0,β>=0(素材と接続性の使用)

出力:

  • スケール係数f
  • H、部分グラフG
  • Loc:各ポリゴンの位置と角度V(G)
  • 解の品質尺度:M = α F + β | E H |mm=α.f+β.|E(H)||E(G)|

次の条件に従って最大化します。m

  • |V(H)|=|V(G)| (1)
  • |E(H)|<=|E(G)| (2)
  • すべてのポリゴンので、係数によってスケーリング位置での内側にある(3) S S i f L o c S iPSiSSifLoc(Si)P
  • V(H)のポリゴンV(H)は重なりません(4)

(V(G)はグラフの頂点で、Sは多角形のセットですが、それらは同じオブジェクトのセットを表します。これを行うためのよりコンパクトな方法があるかもしれません。)

条件の説明:

  • (1)すべてのポリゴンを最終レイアウトに配置する
  • (2)必要に応じて一部の接続が切断される場合があります
  • (3)(4)ボールは革でできている

これがターゲットポリゴンです レザーシート

これが、パックしたいポリゴンのセットです。 多面体ネット


切り取りたい多角形について話していますか?
A.シュルツ

私の場合、ポリゴンはプラトンの立体の面であるため、規則的です。ただし、単純なポリゴンのパッキングも機能するはずです。なぜ私がパックしたいポリゴンが凸面かどうかを知りたいのですか?
アレシール

1
ポリゴンが非凸の場合、カットなしで元のポリゴン内に常に単一の非凸ポリゴンを配置できます。したがって、この質問は一般的なポリゴンには意味がありません。
A.シュルツ

これが重要かどうかはわかりませんが、境界ポリゴン(革)が凸であるか、凹でもありますか?
Paresh

4
正方形に最大数の正方形を詰め込むというはるかに単純な問題でさえ、困難であることがわかりました(申し訳ありませんが、リンクは便利ではありませんでしたが、数か月前にこの問題につまずきました)。手でポリゴンをジャグリングするだけで、最適なものからそれほど遠くないでしょう。
フォンブランド

回答:


3

これは、パッキング問題と呼ばれる問題の最適化クラスに属します。あなたの場合、コンテナとしての通常のポリゴンの代わりに、不規則なポリゴンがありますが、考え方は同じです。
これらの最適化の問題は通常NP困難であるため、正確な解決策を得る簡単な方法はないと思います。
この種の問題に興味がある人もいます。解決された特定の梱包問題のこのリンクを見つけました:http : //www2.stetson.edu/~efriedma/packing.html

私が見る最も簡単な方法は、レザーシートのほぼ中央を定義し、そこにポリゴンのセットを移動し、スケールを上下させて、ポリゴンのセットがターゲットポリゴン内にあるかどうかを確認することです。希望するポリゴンのセットに対して、より近い縮尺係数「f」。

ただし、大規模なジャグリングボールの生産にこの要素を使用する場合を除き、おそらく手作業で行うだけで十分でしょう。

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