23. September 2013
KOORDINATENSYSTEM - REKURSIVE FUNKTIONEN - FRAKTALE http://blogs.iad.zhdk.ch/codingspace/koordinatensystem/ http://blogs.iad.zhdk.ch/codingspace/lektionen/lektion-5/ FREITAG, 20.09.2013 Wir bearbeiteten die rekursive Funktion sowie ein weiteres Beispiel wo die Position der Maus direkten Einfluss die <push/popMatrix> hat. Bei den der aufgabe der rekursiven Funktion sollten wir mit den Werten herumspielen und die Auswirkung sehen, damit wir den ganze Code verstehen. Ebenfalls gab es eine weitere Kanckknuss, bei welcher wir einen kleinen Smiley um ein grösseren kreisen lassen musste (siehe Beispiel unten). EIGENERFAHRUNG Mit der Anwendung der rekursiven Funktion konnte ich den Code sehr gut nachvollziehen. Jedoch bereitet es mir Schwierigkeiten das Prinzip auf etwas völlig anderes anzuwenden. Werde noch Tutorials reinziehen, um dieses Problem zu beheben. Mit dem anderen Beispiel, wo sich das eine Objekt um das andere dreht "tüftelte" ich einwenige an der Verschachtelungsmöglichkeiten mit <push/popMatrix>. Beispiel 1void setup(){ size(600,600); noLoop(); } void draw(){ background(255); pushMatrix(); translate(width*.5,600); scale(random(0.2,1)); branches(randomly); popMatrix(); } int randomly = (int)random(1,20); void mousePressed(){ redraw(); } void branches(int randomly){ if(randomly&lt;=0){ pushStyle(); int clr = (int)random(1,255); stroke(clr, 0,0,150); fill(clr,0,0,150); line(0,0,50,50); popStyle(); return; } int x,y; int count = (int)random(1,10); for(int i = 0; i &lt; count; i++) { x = (int)random(-100, 100); y = -(int)random(10, 150); line(0,0,x,y); pushMatrix(); translate(x,y); scale(random(.3, .95)); branches(randomly-1); popMatrix(); } }Output 1 Beispiel 2
void setup(){ size(800,800); smooth(); strokeWeight(1); } float rotation = 0; float rotation2 = 0; void draw(){ background(255); stroke(1,1,random(100,255)); float radius = dist(mouseX,mouseY,width/2,height/2); // rechne die distanz vom mousecursor zum fensterzentrum aus radius = map(radius,0,width,.4,2); // rechne aus in welchem bereich der radius am schluss sein sollte pushMatrix(); pushMatrix(); translate(400,400); rotate(calcAngle()); scale(radius); myForm(); pushMatrix(); rotate(rotation2); translate(180,0); scale(0.3); myForm2(); popMatrix(); pushMatrix(); rotate(rotation); translate(120,0); scale(.2); myForm2(); popMatrix(); popMatrix(); popMatrix(); rotation+= 0.08; rotation2 += 0.04; } void myForm(){ fill(20,230,random(150,200)); ellipse(0,0,180,180); } void myForm2(){ fill(random(30,100), random(30,100), random(30,100)); ellipse(0,0,180,180); } // berechne den winkel zur fenstermitter vom mausecursor aus // die winkel sind in radiant float calcAngle() { return -atan2(mouseX - (width / 2),mouseY - (height / 2)); } &amp;nbsp;Output 2