在无限平面上定位随机元素的算法

时间:2015-07-04 02:49:51

标签: algorithm

我正在寻找一种算法,我可以在给定视口(顶部,左侧,宽度高度)内建立伪随机位置,而无需存储这些位置。假设我有一个从(0,0)到(100,100)的视口。然后我会在(67,25),(36,42)和(1,2)处找到元素。如果我要将该视口从(-50,-50)更改为(50,50),我仍会找到(36,42)和(1,2)但我也可能会找到一个(-14) ,7)和(-32,-20)。我不知道怎么能让这个更清楚。

1 个答案:

答案 0 :(得分:2)

处理整数的示例。它也可以修改成浮点数。

import random

STEP = 10  # size of square with random points
COUNT = 6  # number of random points in the square

def get_points(x1, y1, x2, y2):
    points = []
    sx = (x1 // STEP) * STEP
    sy = (y1 // STEP) * STEP
    for bx in range(sx, x2, STEP):
        for by in range(sy, y2, STEP):
            random.seed(bx + by)
            for i in range(COUNT):
                px = bx + random.randrange(STEP)
                py = by + random.randrange(STEP)
                if x1 <= px < x2 and y1 <= py < y2:
                    points.append((px, py))
    return points

print get_points(0, 0, 10, 10)
print get_points(0, 0, 100, 100)

整个平面覆盖着包含随机点的方块,具体取决于方形位置。

您可以找到左下方(sxsy)的位置,然后计算所选窗口所需的所有方块的位置(bx,{{ 1}})。您初始化随机数生成器,然后在方块中生成所有必要的点(bypx)。但实际上只考虑窗口内的点。

只是为了灵感。