将对象放在居中对象周围

时间:2017-09-07 14:38:44

标签: java javafx

我有一个动态的对象列表,需要将它们放在中心对象周围而不重叠。它们都是矩形形状。我正在使用Java FX文本对象。

如果我用

将第一个物体放在中心
int x =(int)(scene.getWidth() /2);
int y =(int)(scene.getHeight() /2);

如何在不重叠的情况下围绕它定位其他物体。有大量物体。

我不确定如何检测到碰撞,然后在检测到碰撞后移动它们。

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

由于

1 个答案:

答案 0 :(得分:0)

要确定两个矩形是否重叠,您可以将它们的实例创建为java.awt.Rectangle,然后调用intersects方法以查看它们是否重叠。您还可以使用intersection方法计算移动一个与另一个没有交叉的程度。

你也有问题如何移动它们。我的第一个想法是你应该像LayoutManager那样做。扩展Parent并覆盖layoutChildren()方法并根据需要将它们放在那里。在计算出无碰撞的排列后,它允许您设置矩形的绝对坐标。

如果你必须经常检查所有其他矩形的交叉点,那么这个算法的计算成本会相当高。也许你想看看像FlowPane这样的LayoutManager来优化它。 FlowPane会将对象排成一行直到边界,然后分解到下一行。 (如果是垂直的话,则为列)

如果您不能使用LayoutManager,还有其他方法可以优化它,但我需要有关用例的更多信息来帮助您。根据用例,this question可以帮助您。