繁体   English   中英

生成 50 个点,它们之间的最小距离为 0.1

[英]generate 50 points with minimum distance between them is 0.1

我想在单位正方形中生成 50 个随机坐标,以便每个点与其他点的最小欧几里得距离为 0.1。 我怎样才能在python中生成这样的? 其实我需要知道如何把条件放在随机数中。 但我找不到任何方法。 我在其中使用具有该条件的 if 命令的一种方法。 但我需要生成 50 个这样的点。 谢谢你的帮助。

一个廉价的解决方案是在正方形中不断生成随机点。 如果生成的点与其他点不太接近,则保留它,否则将其丢弃。 一旦达到 50 点,您就可以停止生成随机点。

以下是 Hanna Gabor 描述的生成和测试解决方案的实现:

import random
import math

npoints = 50
mindist = 0.1

def genpt():
    return (random.random(), random.random())

def distance(p1,p2):
    return math.sqrt((p1[0]-p2[0])**2 + (p1[1]-p2[1])**2)

sample = []

while len(sample) < npoints:
   newp = genpt()
   for p in sample:
      if distance(newp,p) < mindist: break
   else:
     sample.append(newp)

print(sample)

这适用于 50 分。 限制似乎在 80 点左右。

正如@pygri 在评论中指出的那样,您还可以从 0 到 1 沿 x 和 y 轴以 0.1 的间隔间隔的 121 个点中选择 50 个随机点,因为保证其中任意两个之间的距离不小于大于 0.1。 以下代码将执行此操作:

import random

npoints = 50

allpoints = [(a/10,b/10) for a in range(11) for b in range(11)]
sample = random.sample(allpoints, npoints)

print(sample)

对于i=0..10j=0..10您可以从常规网格(0.1*i, 0.1*j)选取 50 个点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM