【发布时间】:2018-09-14 06:29:15
【问题描述】:
假设给定一组具有不同区域的矩形,并且一些矩形可能重叠。 目标是在矩形区域之间生成一个均匀的随机点。
矩形被定义为一对两点:
- (x1,y1) - 最左下角;
- (x2,y2) - 右上角。
我在不重叠的矩形中均匀分布随机点的策略是,- 根据面积随机选择一个矩形 (existing solution):
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))。
但是如果某些矩形可以重叠怎么办?
【问题讨论】:
-
如果点包含在多个重叠的矩形中,为什么对您很重要?
-
因为它打破了统一性。
-
您必须更好地解释这一点。什么的均匀性?
-
@JimMischel 目标是在矩形区域之间均匀生成一个随机点。
-
统一选择边界矩形中的一个点,重复直到它在其中一个矩形内。
标签: algorithm math random probability uniform-distribution