我试图弄清楚如何制作一个程序,将随机“N”点放在一个大小为L的正方形中。
如何将其编码到随机点“i”知道前一个点“i-1”的位置,如果是,请再试一次,直到两个点不重叠?
以下是我希望它看起来像random particles
的示例答案 0 :(得分:1)
<强>摘要:强> 放置一个新点时,查找数据结构中是否存在点。如果存在,重新计算随机数。否则,放点并增加计数器。
一个简单的数据结构可以是一个2x2阵列。
假设:您已经写过,您不希望与最后一个放置点重叠。我已经假设你根本不想要任何重叠。
P.S。:有更好的方法在Python中选择列表中的随机元素。
例如,考虑sample
模块的random
函数。此功能允许您从列表中获取随机索引。事实上,这将是你的情况下点的位置。
修改强>
import random
SQSIZE = 3
N = 5
sq = [[0 for x in range(SQSIZE)] for x in range(SQSIZE)]
randRow = random.randint(0,SQSIZE-1)
randCol = random.randint(0,SQSIZE-1)
for i in range(N):
if sq[newrandRow][newrandCol]: # oops
i-=1
else: # yay
sq[newrandRow][newrandCol] = 1
显然这需要一些工作,但大纲可能会有所帮助! :)
答案 1 :(得分:0)
这样的东西对你有用吗?
from random import random
dots_added = set()
def add_point():
point = frozenset([random(), random()])
if point in dots_added:
add_point()
else:
dots_added.add(point)
''' another code to add dots.'''
答案 2 :(得分:0)
你的例子看起来不像&#34;随机点&#34 ;;它看起来像一个10 x 10的点阵列,并添加了一些抖动:
import matplotlib.pyplot as plt
from random import random
def get_dots(width, height, pitch):
xs, ys = [], []
for y in range(height // pitch):
for x in range(width // pitch):
xs.append((x + random()) * pitch)
ys.append((y + random()) * pitch)
return xs, ys
def main():
xs, ys = get_dots(20, 20, 2)
plt.scatter(xs, ys, c="r")
plt.axis((0., 20., 0., 20.))
plt.show()
if __name__=="__main__":
main()
产生