2014-11-18 17 views
5

enter image description hereEsas olarak X ve Y eksenlerinde çizilmiş olan daireler NEDEN?

Çevreleri çizen işleme kullanarak bir döngü oluşturdum, genel şekli bir daire olmalıdır. Ancak, esas olarak X ve Y eksenine yakın çizilirler. Konumunun hesabı için açıyı randomize ettim, sorunun nerede olduğunu göremiyorum.

Kod aşağıdaki gibi:

for (int omega = 0; omega<1080; omega++){ //loop for circle creation 
    radius = (int)random(80); //random radius for each circle 

    int color1= (int)random(100); //little variation of color for each circle 
    int color2= (int)random(100); 

     int locationY = (int)(sin(radians(omega))*random(width/2+1)); //location calcualtion 
     int locationX = (int)(cos(radians(omega))*random(width/2+1)); 
     fill(0,color1+200,color2+200,50); 
     ellipse(locationX,locationY,radius,radius); //draw circles 
    } 
+0

Wich rastgele uygulama kullanıyorsunuz? Normal yapı bazen küme değerlerine eğilimlidir. Başka bir tohum kullanmayı deneyin veya başka bir rastgele uygulamayı deneyin. Bir çift gerçek iyi olan var. Mersenne Twister için googling deneyin, bu gerçekten iyi bir ve java için bolca uygulama bulabilirsiniz. –

+0

"X ve Y eksenine yakın" ne anlama geliyor? Ekran görüntüsü verebilir misiniz? Onu imgur'a yükle. – Kevin

+0

Eklemek için ilişik – eneko

cevap

5

İyi bir nokta @Durandal (+1)

Ancak rasgele çevrelerle bir daha düşünce var. homojen dağılımı den

double distance = random(width/2 ); 

rastgele:

Örneğin kodu ile rastgele mesafe oluşturmak. 0 ile width/2 arasındaki tüm değerleri aynı olasılıkla aynı anlama sahiptir. Ancak 3*r yarıçapı ile daire 9 kat daha büyük alana sahip, daha sonra r yarıçapı ile daire içine alın. Yani, merkezden daha küçük mesafe, görebileceğimiz daha büyük yoğunluk.

Bu şekilde ilk görüntü üzerinde görebileceğiniz gibi homojen bir yoğunluğa yok bulutüretti. enter image description here

Ama daha büyük değerler eşit bulutu oluşturulan alabilirsiniz küçük olanları daha az olası olduğunu söyledi öyle bir şekilde olasılık yoğunluk fonksiyonu değiştirirseniz.

Bu tür basit bir değişiklik: ikinci görüntüde görüldüğü gibi

double distance = Math.sqrt(random(width/2 * width/2)); 

daha homojen, çevre dağıtılmış üretir. Bu yardımcı olabilir umuyoruz

enter image description here ..

+0

İyi bir nokta ve çok güzel resimlerle gösterilen +1 – Durandal

+0

Harika bir açıklama arkadaşım. Çok çok teşekkürler! – eneko

5

Onun konumu hesaplamak şekilde, sen X ve Y bileşeni için iki farklı rastgele değerler çekiyoruz bir eser:

int locationY = (int)(sin(radians(omega))*random(width/2+1)); //location calcualtion 
int locationX = (int)(cos(radians(omega))*random(width/2+1)); 

Sen X ve Y için merkezden bir rastgele değer "uzaklığı" kullanmalısınız, bu kümelenmeyi eksenlere doğru kaldıracaktır.

İlgili konular