複雑な問題があります。次の条件で、高さの異なる div をランダムに生成しようとしています。
- 重複する div はありません。
- 同じ「x ライン」に沿った div は同じ幅を持ち、
- div は、条件 2 に違反することなく、使用可能な最大幅を占有します。
作成時に各 div の値を保存しています。オーバーラップを防ぐのは簡単です。基本的に、すべての div をループしてチェックします。
if (obj1.y < obj2.x && obj2.x < obj1.y)
ただし、衝突する div が複数あると、事態は複雑になります。2 つの衝突しない div (全幅) があるとします。
ここにイラストへのリンクがあります(担当者なしで画像を含めることはできません:( )
https://dl.dropboxusercontent.com/u/23220381/divs.png
ここで、Div1.width = Div2.width = Div3.width です。
アルゴリズムを作成する最初の試みは失敗します。基本的に、div を追加すると、衝突の数が検出されます。Div3 の場合は他の 2 つの div と衝突しますが、Div1 と Div2 は衝突しないので、幅を 1/3 ではなく 1/2 で乗算するだけで済みます。Div1 と Div2 が衝突するかどうかを確認することでアルゴリズムを修正できますが、これを n Div に一般化する方法がわかりません。
どんな助けでも大歓迎です:)
編集:基本的なシナリオを説明するために画像を追加しました:)