2017-09-07 16 views
0

私はオブジェクトの動的なリストを持っており、重複することなく中心のオブジェクトの周りに配置する必要があります。それらはすべて長方形です。私はJava FXのテキストオブジェクトを使用しています。オブジェクトを中心に置いたオブジェクトの周りにオブジェクトを配置する

私はoverlapping.Thereは、オブジェクトの量をn個ずにその周りに他の人を配置するにはどうすればよい

int x =(int)(scene.getWidth() /2); 
int y =(int)(scene.getHeight() /2); 

と中央の最初のオブジェクトを配置する場合。

どのように衝突を検出し、衝突が検出された後でそれらを移動するかわかりません。 2つの長方形は、あなたがjava.awt.Rectangleとしてそれらのインスタンスを作成し、彼らが重なるかどうかを確認するためにintersectsメソッドを呼び出すことができ重なっているかどうかを判断するために

if collision = true { 
       translate x 30 px{ 
       if still true { 
       translate y 30{ 
       if still true{ 
       translate x -30 
       if still true{ 
       translate y -30{ 
       if still true { 
       start again but increase movement size by 20 each iteration 
       until collision free placement occurs. 


       x----->----x 
       |   | 
       ^  | 
       |   | 
       |   | 
       x----<-----x 

おかげ

答えて

0

intersectionメソッドを使用して、どれをどれだけ移動して他のものと交差しないかを計算することもできます。

また、どのように移動するのかという疑問もありました。私の最初のアイデアは、LayoutManagerのようにしなければならないということです。親を拡張してlayoutChildren()メソッドをオーバーライドし、必要に応じてそこにレイアウトします。衝突のない配置を計算した後、矩形の絶対座標を設定することができます。

このアルゴリズムでは、他のすべての長方形との交点を常にチェックする必要がある場合は、計算コストが高くなります。レイアウトを最適化するために、FlowPaneのようなLayoutManagerを見たいかもしれません。 FlowPaneは境界線までオブジェクトを1行にレイアウトし、次の行に分割します。 (または縦の場合は列)

LayoutManagerを使用できない場合は、他の方法でレイアウトを最適化することができますが、そのためのユースケースについての詳細が必要です。おそらくthis questionがあなたを助けることができるユースケースに応じて。

関連する問題