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

标签 algorithm

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

最佳答案

处理整数的示例。它也可以修改为 float 。

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)

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

找到左下角方 block 的位置 (sx, sy),然后计算所选窗口所需的所有方 block 的位置 ( >bx, by).您初始化随机数生成器,然后生成正方形中所有必要的点(pxpy)。但实际上只考虑窗口内的点。

只是为了灵感。

关于在无限平面上定位随机元素的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31216385/

相关文章:

algorithm - 在视锥中找到所有大小为 L 的立方体的方法?

algorithm - Arduino:将数据存储在EEPROM中的轻量级压缩算法

r - 使用散列或其他方法评估与 R 中组合列相关的信息

arrays - 插入多个元素后恢复堆属性

php - 将色调分类为最短跨度的算法,例如 `350,354,2,10,15` ? [0-360度]

algorithm - 给定有一个负边 (u,v) 的有向加权图,找到最短路径 (s,t)

algorithm - 如果用户访问 n 次,则计算唯一用户数

algorithm - 什么是逆后序?

algorithm - 寻找最佳的文件大小组合

c++ - 如何优化我的截屏实用程序?