23. September 2013
Ziel war es das vorgefertigte Template eines - der Maus entsprechend rotierend und skalierendes - Smileys so zu verändern, dass es von seinem Ebenbild fortlaufen umkreist wird. Erst mal musst ich aus dem bestehenden Template schlau werden, was mir aber nur teilweise gelang. Was es mit dem "pushMatrix" auf sich hatte verstand ich ziemlich schnell, sie erlauben eine zeitweilige Neudefinition des Koordinatensystems bis zum Befehl "popMatrix". Die trigonometrischen Funktionen blieben mir weitgehend schleierhaft doch immerhin verstand ich, dass ich dies zum Lösen der Aufgaben gar nicht zu wissen brauchte. Es reichte, die "pushMatrix" des statischen Smileys richtig in jener des Grossen Smileys zu verschachteln und seine "rotation()" von einer zunehmenden Variabel abhängig zu machen, um den gewünschten Effekt zu erzielen. Euphorisiert von den neuen Möglichkeiten verschachtelte ich weitere Smiley-Funktionen in die bestehenden und fügte einen Button zum Ändern der Richtung und Geschwindigkeit ein (Key '1' und '2'). Toll. Aus Neugier löschte ich dann den "background()" und gab den Smileys verschiedene halbtransparente Farben - nun wurden die Spuren der Objekte sichtbar.float orbit; float gesch; void setup() { size(800, 800); // def. fenstergroesse smooth(); // aktiviere antialiasing strokeWeight(15); // linienbreite } void draw() { // background(255,255,255,1); // def. hintergrundfarbe float radius = dist(mouseX, mouseY, width/2, height/2); // rechne die distanz vom mousecursor zum fensterzentrum aus radius = map(radius, 0, width, 1, 4); // rechne aus in welchem bereich der radius am schluss sein sollte orbit = orbit+gesch; pushMatrix(); translate(width/2, height/2); rotate(calcAngle()); scale(radius); pushStyle(); stroke(0,0,255,50); smiley(); // funtions aufruf popStyle(); rotate(orbit); pushMatrix(); translate(100, 100); rotate(0); scale(radius/2); pushStyle(); stroke(200,200,0,50); smiley(); popStyle(); rotate(orbit); pushMatrix(); translate(100, 100); rotate(0); scale(radius/4); pushStyle(); stroke(255,0,0,50); smiley(); rotate(orbit); pushMatrix(); translate(100, 100); rotate(0); scale(radius/6); pushStyle(); stroke(0,255,0,255); smiley(); // funtions aufruf popStyle(); popMatrix(); popMatrix(); popMatrix(); popMatrix(); } void keyPressed() { switch(key) { case '1': gesch = gesch+0.01; break; case '2': gesch = gesch-0.01; break; } } // funktion void smiley() { noFill(); ellipse(0, 0, 180, 180); // kopf fill(0); ellipse(0 - 30, 0 - 30, 20, 20); // linkes augen ellipse(0 + 30, 0 - 30, 20, 20); // rechtes augen noFill(); arc(0, 0, 100, 100, radians(20), radians(180-20)); // mund } // berechne den winkel zur fenstermitter vom mausecursor aus // die winkel sind in radiant float calcAngle() { return -atan2(mouseX - (width / 2), mouseY - (height / 2)); }Erkenntnis: Es lassen sich mit wenig Kenntnis schon viele interessante Dinge simulieren. Mit etwas mehr Kenntnis bestimmt auch relevantere Dinge als die "Wahrnehmung unter Drogeneinfluss", welche meine Smileys wiederzugeben scheinen.