当前位置 : 首页 » 互动问答 » 正文

从一组矩形中统一挑选一个随机点,其中一些矩形重叠

分类 : 互动问答 | 发布时间 : 2018-04-27 15:06:09 | 评论 : 1 | 浏览 : 60 | 喜欢 : 5

假设它被赋予一组具有不同区域的矩形,并且一些矩形可以重叠。 客观性在矩形中均匀生成一个随机点。

矩形定义为两个点的对a:

  • (x1,y1) - 最左下角;
  • (x2,y2) - 右上角

我在不重叠矩形中随机点均匀分布的策略是, - 根据区域随机选择一个矩形(现有解法):

 (int i = 0; i <rectangles.length; i ++){
      int area =(rectangles [i] .x2  -  rectangles [i] .x1)*
                 (矩形[i] .y1  - 矩形[i] .y2);
         if(rand.nextInt(total + area)> = total){
             selected = i;
             打破;
         }
         总面积+ =面积;
   }
然后在矩形内生成一个任意点:

x1 +(1 /(x2-x1))* rand(0,(x2-x1-1)),

  • y1 +(1 /(y2 -y1))* rand(0,(y2-y1-1))。
  • 但是如果某些矩形可能重叠,怎么办?

But how to be if some of rectangles could overlap?

回答(1)

  • 1楼
  • 如果第一个预处理步骤足够快(假设矩形是小于1000的整数坐标),则这是一个简单而快速的解决方案:

     squares = set()
    直接在rects:
        对于oneByOneSquare rect:
            squares.add(oneByOneSquare)
    
    square = list(squares)
    而真:
        randomSquare = random.choice(方形)
        randomPoint = randomPointInsideSquare(randomSquare)
    

    这个想法是将矩形分成正方形。然后随机选择正方形并在该正方形内随机生成一个点。

相关阅读:

How does C compute sin() and other math functions?

How to calculate the shortest path between two points in a grid

How to generate a random int in C?

Getting random numbers in Java

How to generate a random alpha-numeric string?

Generate random integers between 0 and 9

Random color generator

How do I calculate the normal vector of a line segment?

Evaluating string "3*(4+2)" yield int 18

Unique (non-repeating) random numbers in O(1)?