2017-11-13 18 views
1

私はそれに2つの赤い点を持つ空白のキャンバスを持っているとしましょう。ランダム加重点を追加

ランダムにキャンバスにポイントを追加するアルゴリズムがありますが、指定した半径の赤いポイントに偏っているような方法がありますか?ここで

は、一例として、粗画像です: enter image description here

この質問は、Pythonのは本当に任意の言語に適用されているにもかかわらず。

答えて

2

最初の点または2番目の点をランダムに選択し、極座標で単一のスケールパラメータを使用してある分布を生成し、 の中心点の位置に移動します。

enter image description here

ピクチャー

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

いくつかの合理的な半径方向分布(以下のコードでは、ガウス、指数関数的またはコーシーが同様に働くかもしれない)を選択します

関連する問題