我有一个动态的对象列表,需要将它们放在中心对象周围而不重叠。它们都是矩形形状。我正在使用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
由于
答案 0 :(得分:0)
要确定两个矩形是否重叠,您可以将它们的实例创建为java.awt.Rectangle
,然后调用intersects
方法以查看它们是否重叠。您还可以使用intersection
方法计算移动一个与另一个没有交叉的程度。
你也有问题如何移动它们。我的第一个想法是你应该像LayoutManager
那样做。扩展Parent并覆盖layoutChildren()
方法并根据需要将它们放在那里。在计算出无碰撞的排列后,它允许您设置矩形的绝对坐标。
如果你必须经常检查所有其他矩形的交叉点,那么这个算法的计算成本会相当高。也许你想看看像FlowPane
这样的LayoutManager来优化它。 FlowPane
会将对象排成一行直到边界,然后分解到下一行。 (如果是垂直的话,则为列)
如果您不能使用LayoutManager,还有其他方法可以优化它,但我需要有关用例的更多信息来帮助您。根据用例,this question可以帮助您。