【问题标题】:Adding random weighted point添加随机加权点
【发布时间】:2017-11-13 13:48:10
【问题描述】:

假设我有一个空白画布,里面有 2 个红点。

是否有一种算法可以在画布中随机添加一个点,但它更偏向于提供半径的红点?

这是一个粗略的图像作为示例:

尽管这个问题是针对 Python 的,但它确实适用于任何语言。

【问题讨论】:

    标签: python math random point


    【解决方案1】:

    当然。随机选择第一个点或第二个点,然后在极坐标中生成一些具有单个尺度参数的分布,然后移位 中心点位置。选择一些合理的径向分布(下面代码中的高斯分布,指数或柯西也可以)

    import math
    import random
    
    import matplotlib.pyplot as plt
    
    def select_point():
        p = random.random()
        if p < 0.5:
            return 0
        return 1
    
    def sample_point(R):
        """
        Sample point inpolar coordinates
        """
        phi = 2.0 * math.pi * random.random() # angle
        r   = R * random.gauss(0.0, 1.0)      # might try different radial distribution, R*random.expovariate(1.0)
    
        return (r * math.cos(phi), r * math.sin(phi))
    
    def sample(R, points):
        idx = select_point()
    
        x, y = sample_point(R)
    
        return (x + points[idx][0], y + points[idx][1])
    
    R = 1.0
    points = [(7.1, 3.3), (4.8, -1.4)]
    
    random.seed(12345)
    
    xx = []
    yy = []
    cc = []
    
    xx.append(points[0][0])
    xx.append(points[1][0])
    
    yy.append(points[0][1])
    yy.append(points[1][1])
    
    cc.append(0.8)
    cc.append(0.8)
    
    for k in range(0, 50):
        x, y = sample(R, points)
        xx.append(x)
        yy.append(y)
        cc.append(0.3)
    
    plt.scatter(xx, yy, c=cc)
    plt.show()
    

    图片

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 2015-07-05
      • 2010-09-08
      • 2014-07-21
      • 2018-03-15
      • 1970-01-01
      相关资源
      最近更新 更多