2016-05-04 9 views
0

Dies ist eine Fortsetzung des ursprünglichen Beitrags:Array von Ellipsen entlang eigenen Mittelpunkt rotierenden

Calculate ellipse size in relation to distance from center point

Ich versuche, ein Raster von Ellipsen zu schaffen, die die ganze Zeit ihre eigenen Drehzentrum drehen. Dann versuche ich, das "Quadratgitter" von Ellipsen um einen Mittelpunkt zu skalieren, während ich ihnen immer noch erlaube, sich entlang ihrer eigenen Mittelpunkte zu drehen.

Multiple ellipses + Scale by center

ArrayList<RotatingEllipse> ellipses = new ArrayList<RotatingEllipse>(); 


void setup() { 
    size(500, 500); 
    noStroke(); 
    smooth(); 

    ellipses.add(new RotatingEllipse(width*.25, height*.25)); 
    ellipses.add(new RotatingEllipse(width*.75, height*.75)); 

    ellipses.add(new RotatingEllipse(width*.75, height*.25)); 
    ellipses.add(new RotatingEllipse(width*.25, height*.75)); 

    ellipses.add(new RotatingEllipse(width/2*.25, height/2*.25)); 
    ellipses.add(new RotatingEllipse(width/2*.75, height/2*.75)); 

    ellipses.add(new RotatingEllipse(width/2*.75, height/2*.25)); 
    ellipses.add(new RotatingEllipse(width/2*.25, height/2*.75)); 
} 

void draw() { 
    background(#202020); 

    for (RotatingEllipse e : ellipses) { 
    e.stepAndDraw(); 
    } 
} 


class RotatingEllipse { 

    float rotateAroundX; 
    float rotateAroundY; 
    float distanceFromRotatingPoint; 
    float angle; 

    public RotatingEllipse(float startX, float startY) { 

    rotateAroundX = (width/2 + startX)/2; 
    rotateAroundY = (height/2 + startY)/2; 


    distanceFromRotatingPoint = dist(startX, startY, rotateAroundX, rotateAroundY); 

    angle = atan2(startY-height/2, startX-width/2); 
    } 

    public void stepAndDraw() { 


    angle += PI/128; 


    float x = rotateAroundX + cos(angle)*distanceFromRotatingPoint; 
    float y = rotateAroundY + sin(angle)*distanceFromRotatingPoint; 



    float distance = dist(x, y, width/2, height/2); 

// size of ellipses 
    float diameter = 50*(200-distance)/500; 
    ellipse(x, y, diameter, diameter); 
    } 
} 
+0

Was genau ist deine Frage? Was ist mit diesem aktualisierten Code funktioniert nicht, wie Sie es erwarten? –

+0

Ich habe den falschen Code hinzugefügt, ich habe den richtigen Teil hinzugefügt, der nur Ellipsen hinzufügt. Ich dachte, dass das Hinzufügen von width/2 und height/2 es erlauben würde, eine Ellipse zwischen die beiden äußeren Ellipsen zu setzen, aber das Ergebnis ist sehr unterschiedlich. Die Frage hängt mehr oder weniger mit dem Diagramm zusammen, das fragt, wie ich Ellipsen zwischen den beiden äußeren Ellipsen hinzufüge und wie ich alle diese rotierenden Ellipsen um einen Mittelpunkt skalieren kann. Danke –

Antwort

0

Ich glaube, Ihre Frage aus zwei Teilen.

Teil 1: Warum zeigen Ihre Punkte, wo sie sind?

Das Beste, was Sie tun können, um zu verstehen, wo die Dinge sein werden, ist, ein Stück Papier und einen Bleistift herauszuholen und einige Punkte herauszuziehen. Wo wird jeder Ihrer Punkte angezeigt?

Verarbeitung setzt Ihre Punkte genau dort, wo Sie es doch sagen, sie zu setzen. Hier ein Beispiel:

ellipses.add(new RotatingEllipse(width/2*.25, height/2*.75)); 

Wo erwarten Sie, dass zeigen? Wenn Ihre Breite und Höhe beide 500 sind, dann wird width/2*.2562.5 und height/2*.75 wird 187.5 sein. Mit anderen Worten, dies wird irgendwo im oberen linken Quadranten Ihres Bildschirms sein.

Machen Sie diese Mathematik für jeden Ihrer Ellipsen, und Sie werden genau sehen, warum sie dort auftauchen, wo sie sind.

Teil 2: Wie können Sie den Mittelpunkt zwischen zwei Punkten berechnen?

Dies ist mehr eine mathematische Frage als eine Programmierfrage, und googeln etwas wie "Mittelpunkt zwischen zwei Punkten" gibt eine Tonne Ergebnisse zurück.

Aber im Grunde, wenn Sie zwei Punkte an x1,y1 und x2,y2, dann können Sie ihre Mitte finden durch ihre x und y Positionen im Durchschnitt:

midpoint = (x1+x2)2, (y1+y2)/2

Ich schlage vor, Sie durch den ersten Teil zu Figur arbeiten heraus, wo deine Punkte sein sollten, dann benutze den zweiten Teil, um die Mittelpunkte zwischen diesen Punkten zu finden.

+0

Nach dem Schreiben von allem wurde der Standort viel klarer. Vielen Dank –