2017-11-13 15 views
1

Sagen wir, ich habe eine leere Leinwand mit 2 roten Punkten drin.Hinzufügen von zufälligen gewichteten Punkt

Gibt es einen Algorithmus, um zufällig einen Punkt in der Zeichenfläche hinzuzufügen, aber auf eine Weise, bei der die roten Punkte mit einem angegebenen Radius stärker ausgerichtet sind?

Hier ist ein rohes Bild als Beispiel: enter image description here

Auch wenn diese Frage für Python ist es wirklich für jede Sprache gilt.

Antwort

2

Sicher. Wählen Sie den ersten Punkt oder den zweiten Punkt nach dem Zufallsprinzip aus, generieren Sie dann eine Verteilung mit einem einzelnen Skalierungsparameter in Polarkoordinaten, und verschieben Sie dann um Mittelpunktposition. Wählen Sie eine angemessene radiale Verteilung (Gaußsche in dem folgenden Code, exponentielle oder Cauchy könnte funktionieren auch)

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

Bild

enter image description here

Verwandte Themen