我想要做的是创建一个方法,每次检查矩形数组的两个矩形是否相交,以及它们是否重新定位框架上其他位置的两个矩形中的一个,而不是另一个矩形。< / p>
Random rand = new Random();
Rec[0] = new Rectangle(100,100,50,50);
for(int i = 0; i<recs.length; i++){
for(int j = i+1; j<recs.length;j++){
if(recs[i].intersects(recs[j])){
recs[i] = new Rectangle(rand.nextInt(501),rand.nextInt(501),50,50);
repaint();
}
}
}
帧大小为500x500 当我执行此代码时,它仍然具有相交的矩形。 我做错了什么?
包q1;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.Random;
import javax.swing.JComponent;
public class RectangleComponent extends JComponent{
public Rectangle[] recs;
private Random rand;
RectangleComponent(){
rand = new Random();
recs = new Rectangle[6];
//these two intersect
recs[0] = new Rectangle(100,100,50,50);
recs[1] = new Rectangle(110,90,50,50);
//
recs[2] = new Rectangle(200,200,50,50);
recs[3] = new Rectangle(300,300,50,50);
recs[4] = new Rectangle(400,400,50,50);
recs[5] = new Rectangle(250,250,50,50);
for(int i = 0; i<recs.length; i++){
for(int j = i+1; j<recs.length;j++){
if(recs[i].intersects(recs[j])){
recs[i] = new Rectangle(rand.nextInt(501),rand.nextInt(501),50,50);
repaint();
}
}
}
}
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
for(Rectangle x : recs){
g2.draw(x);
}
}
}
import javax.swing.JFrame;
public class RectangleViewer {
public static void main(String[]args){
JFrame frame = new JFrame();
RectangleComponent comp = new RectangleComponent();
frame.add(comp);
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
如果你运行几次,最终会有一个矩形在另一个上面。
答案 0 :(得分:0)
它不是您案例的最佳解决方案,但它可以帮助您根据随机画面修复代码。
因此,在您的情况下,基于随机绘制的算法将如下所示:
但请注意,如果画布上没有足够的空间,最终可能会运行无限循环。
您可以考虑一种算法,为新矩形确定一个好位置,或者发现它没有空间。稍后您可以使用新方法(策略模式)替换随机方法。