假设给定一组具有不同区域的矩形,并且一些矩形可能重叠。目标是在矩形区域之间生成一个均匀的随机点。
矩形被定义为一对两点:
- (x1,y1) - 最左下角;
- (x2,y2) - 右上角。
我在不重叠的矩形中均匀分布随机点的策略是,- 根据区域随机选择一个矩形(现有解决方案):
for(int i = 0; i < rectangles.length; i++) {
int area = (rectangles[i].x2 - rectangles[i].x1) *
(rectangles[i].y1 - rectangles[i].y2);
if(rand.nextInt(total + area) >= total) {
selected = i;
break;
}
total += area;
}
然后在一个矩形内生成一个任意点:
- x1 +(1/(x2-x1))*rand(0,(x2-x1-1)),
- y1 +(1/(y2-y1))*rand(0,(y2-y1-1))。
但是如果一些矩形可以重叠怎么办?