添加随机加权点

时间:2017-11-13 13:48:11

标签: python math random point

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

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

这是一个粗略的图像作为一个例子: enter image description here

即使这个问题适用于Python,它也适用于任何语言。

1 个答案:

答案 0 :(得分:2)

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

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

照片

enter image description here