我有以下代码,它们随机生成(X,Y)元组的列表:
import random
coords = []
for i in range(10):
x = random.randint(85,939)
y = random.randint(75,693)
coords.append((x,y))
在最后一个列表中,如果每个元组之间的绝对差小于85,则将其视为X值重叠;如果绝对偏差小于75,则将其视为Y值重叠。确定最终列表中的元组在两个维度中都不会重叠?
答案 0 :(得分:0)
最简单的方法是仅保留采样和丢弃坐标,而坐标会产生重叠。但是,当您接近填充可用空间时,这将变得非常低效。如果那不是问题,则应采用此解决方案。
效率更高,据我所知,从统计学上讲,同等的是先对一个坐标(例如行)进行采样。然后计算该行中的占用面积,并从其余位置进行采样。
为避免与简单解决方案中的问题相同,如果一行中没有可用空间,则应从该行的可能采样结果中删除该空格(两个方向的边距均为75)。
理想情况下,您不会每次都计算占用区域,但会保留从该行到该行中占用空间的映射以及非完整行的数量,并且仅在插入新图像时更新此映射。您将需要存储 n_rows + 1 个额外的数字。
要澄清一下:从有限的空间采样时,只需减去占用的位置并获得采样结果 n 。然后沿着坐标轴 n 步走,跳过所有占用的位置,找到 n 的正确位置。