【发布时间】:2011-10-28 10:43:14
【问题描述】:
我正在尝试在固定区域内生成一组不属于彼此范围内的点。我的方法如下:
import collections
from random import uniform
X = 100.0
Y = 100.0
points = 10
radius = 10
def in_circle(c_x, c_y, radius, x, y):
dist_squared = (c_x - x)**2 + (c_y - y)**2
return dist_squared <= radius ** 2
current = collections.defaultdict(lambda: [])
threshold = 0
for point in range(1, points+1):
cX = uniform(1.0, X)
cY = uniform(1.0, Y)
for cur in current:
while in_circle(current[cur][0], current[cur][1], 2*radius, cX, cY):
cX = uniform(1.0, X)
cY = uniform(1.0, X)
threshold += 1
if threshold >= 1e+05:
print "Cannot satisfy constraints"
sys.exit(1)
threshold = 0
current[point] = [cX, cY]
print cX, cY
有没有一种好方法可以终止这个算法而不使其进入无限循环?我确实进行了阈值检查,但有更好的方法吗?
【问题讨论】: