知道以前位置的随机位置

时间:2015-12-06 00:44:08

标签: python

我试图弄清楚如何制作一个程序,将随机“N”点放在一个大小为L的正方形中。

如何将其编码到随机点“i”知道前一个点“i-1”的位置,如果是,请再试一次,直到两个点不重叠?

以下是我希望它看起来像random particles

的示例

3 个答案:

答案 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()

产生

enter image description here