2014-11-18 9 views
5

enter image description hereKreise hauptsächlich in X gezeichnet und Y Achsen, WARUM?

Ich habe eine Schleife mit der Verarbeitung erstellt, die Kreise zeichnet, die Gesamtform sollte ein Kreis sein. Sie werden jedoch hauptsächlich in der Nähe der X- und Y-Achse gezeichnet. Ich habe den Winkel für den Kalkül seines Ortes randomisiert, ich kann nicht sehen, wo das Problem liegt.

-Code wie folgt:

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

zufällige Wich Implementierung verwenden Sie? Der normale Build ist manchmal anfällig für Cluster-Werte. Versuchen Sie es mit einem anderen Startwert oder versuchen Sie eine andere zufällige Implementierung. Es gibt ein paar wirklich gute. Versuchen Sie, für Mersenne Twister zu googlen, es ist ein wirklich guter und Sie können viele Implementierungen für Java finden. –

+0

Was bedeutet "nahe der X- und Y-Achse"? Können Sie einen Screenshot bereitstellen? Laden Sie es auf imgur hoch. – Kevin

+0

Angefügt – eneko

Antwort

5

Guter Punkt @Durandal (+1)

Allerdings habe ich einen Gedanken mit zufälligen Kreisen.

Wenn Sie erzeugen zufällige Abstand mit einem solchen Code:

double distance = random(width/2 ); 

Sie zufällig aus gleichmäßige Verteilung. Ich meine alle Werte von 0 bis width/2 haben die gleiche Wahrscheinlichkeit. Aber Kreis mit 3*r Radius haben mal größeren Bereich dann Kreis mit r Radius. Je kleiner der Abstand vom Zentrum ist, desto größer ist die Dichte, die wir sehen können.

Auf diese Weise erzeugte Wolkekeine einheitliche Dichte, wie Sie auf dem ersten Bild sehen können. enter image description here

Aber wenn Sie die Wahrscheinlichkeitsdichtefunktion in einer solchen Art und Weise zu ändern, dass größere Werte weniger wahrscheinlich sind, dass kleinere können Sie gleichmäßig Wolke erzeugt erhalten.

Solche einfachen Änderung:

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

mehr produziert Kreise gleichmäßig verteilt, wie Sie auf dem zweiten Bild sehen kann. enter image description here

ich diese Hoffnung kann hilfreich sein ..

+0

Guten Punkt, und sehr schön mit den Bildern gezeigt +1 – Durandal

+0

Awesome Erklärung mein Freund. Vielen, vielen Dank! – eneko

5

Es ist ein Artefakt der Art und Weise Sie Standort berechnen, sind Sie zwei verschiedene Zufallswerte für die X- und Y-Komponente ziehen:

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

Sie sollte einen zufälligen Wert "Abstand" von der Mitte für X und Y, das wird die Clusterbildung in Richtung der Achsen zu entfernen.

Verwandte Themen