0

多くの小さな長方形 (親と同じ向きで、82x176 ピクセルの固定サイズ) を含む大きな長方形 (軸方向) があります。

今、私は外側にある小さな長方形を持っており、次のように大きな長方形の内側に配置する必要があります。 - ランダムに配置。- スペースが不足しているため、必要な場合を除き、他の小さな長方形と重ならない (この場合は最小限の重なり)。

コードの実行中に複数回使用されるアルゴリズムには、小さな長方形が大きな長方形の中心にうまく分散され、すべてが 1 つの隅に集中しないように、適切な分散を含める必要もあります。

グーグルで検索すると、長方形のパッキング、最大の空の長方形、ランダムな分布に関するいくつかのアルゴリズムが見つかりました...しかし、私の要件に実際に対応するものはなく、適切なコード実装も示していません。

誰か良いアイデアはありますか?

4

2 に答える 2

2

あなたの質問はあまりにも漠然としていて、誰も解決策を投稿するには難しすぎます。これは解決策ではありません。むしろ、こういう問題をどう攻略するかの教訓だ。これを読むことから始めます:

http://en.wikipedia.org/wiki/How_to_Solve_It

そして、あなたがそれをしている間に本のコピーを手に取ってください.

ポリアが賢明に言うように

問題を解決できない場合は、もっと簡単に解決できる問題があります。それを見つけることです。

問題のはるかに簡単なバージョンを次に示します。

私は直線を持っています。この行には、線分のコレクションがあります。コレクション内の各ライン セグメントの始点と終点は、どちらも 0 から何らかのパラメーター n までの範囲内にあります。一部の線分が互いに重なる場合があります。

n 未満の新しい線分の長さが与えられた場合、始点と終点の両方が 0 から n の間にあり、コレクション内の線分が「重ならない」ように、新しい線分をランダムに配置します。それが不可能な場合は、重複する量を最小限に抑える新しい線分の開始座標と終了座標を計算します。

その問題の解決策を C# で書いてもらえますか? 簡単な問題を解決できない場合は、四角形の問題を解決することはできません。

その問題を解決できない場合は、解決できるまで簡単にしてください。n が 200 より大きくならない場合はどうなるでしょうか? 既存のセグメントのコレクションに要素が 0、1、または 2 つしかない場合はどうなるでしょうか? 新しいセグメントの長さが常に 3 の場合はどうなるでしょうか? ランダム性の要件を取り除くとどうなりますか? 最小化問題を解くとどうなるでしょうか? 等々。問題が解決できるまで、問題を単純化し続けます。単純な問題の解決策を見つけたら、それをより大きな問題の解決策に適応させてみてください。簡単な問題を解く練習をすることで、より難しい問題を解くための洞察を得ることができます。

于 2013-03-18T01:42:41.723 に答える
0

必要なものによっては、すでに何かが存在する場合があります。たとえば、Webアプリを開発している場合は、jQuery Masonry(http://masonry.desandro.com/demos/basic-multi-column.html )を参照してください。

そのコードがニーズを満たしているが、Webアプリを実行していない場合は、ソースコードを調べて、必要なものを取得できる可能性があります。

お役に立てれば。

于 2013-03-18T01:53:09.380 に答える