我有许多矩形,我正在尝试生成一个不在其中任何一个内部的随机点。我创建了一个方法来执行此操作,但似乎这导致我的应用程序冻结,因为它必须在生成有效点之前经过大量的点:
public Point getLegalPoint() {
Random generator = new Random();
Point point;
boolean okPoint = true;
do {
point = new Point(generator.nextInt(975), generator.nextInt(650));
for (int i = 0; i < buildingViews.size(); i++) {
if (buildingViews.get(i).getBuilding().getRectangle()
.contains(point)) {
okPoint = false;
break;
}
}
} while (okPoint == false);
return point;
}
我做错了什么,或者是否有更有效的方法来做它以免它冻结我的应用程序?
答案 0 :(得分:8)
如果您在第一次尝试时没有成功,此代码将导致无限循环, okPoint = true 必须位于 do 阻止。了解修复时的性能。 当你检查多个矩形而不只是一个矩形时,我想不出更快的方法。
答案 1 :(得分:0)
我会尝试这样的事情: 选择该点是在rectange(nextInt(4))的左侧/右侧/上/左侧,然后选择该区域中的随机点
代码:
public Point getLegalPoint(int x, int y, int width, int height){
Random generator = new Random();
int position = generator.nextInt(4); //0: top; 1: right; 2: bottom; 3:right
if (position == 0){
return new Point(generator.nextInt(975),y-generator.nextInt(y);
} else if (position == 2){
return new Point(generator.nextInt(975),y+height+(generator.nextInt(650-(y+height)));
}
... same for x ...
}
答案 2 :(得分:0)
生成随机点。然后检查它是否在矩形的边界内。如果是的话: