我正在寻找一种算法,我可以在给定视口(顶部,左侧,宽度高度)内建立伪随机位置,而无需存储这些位置。假设我有一个从(0,0)到(100,100)的视口。然后我会在(67,25),(36,42)和(1,2)处找到元素。如果我要将该视口从(-50,-50)更改为(50,50),我仍会找到(36,42)和(1,2)但我也可能会找到一个(-14) ,7)和(-32,-20)。我不知道怎么能让这个更清楚。
答案 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)
整个平面覆盖着包含随机点的方块,具体取决于方形位置。
您可以找到左下方(sx
,sy
)的位置,然后计算所选窗口所需的所有方块的位置(bx
,{{ 1}})。您初始化随机数生成器,然后在方块中生成所有必要的点(by
,px
)。但实际上只考虑窗口内的点。
只是为了灵感。