簡體   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