24. September 2013
Rekursive Funktionen sind solche, die - wenn sie ausgeführt werden - sich selbst aufrufen. Da dies alleine aber auf eine Endlosschleife hinausläuft, ist es notwendig diese Wiederholung zu begrenzen. Wir definieren also, wie weit sich die Rekursion fortsetzen, und was danach geschehen soll. In unserem Beispiel, waren es die Äste eines baumähnlichen Konstrukts, die sich mehrfach selbst aufriefen und, bei Erreichen einer gewissen Anzahl Verzweigungen, in einer Ellipse endeten. Aufgabe war es das Template zu verändern und damit neue Darstellungen zu erreichen. Die tat ich fleissig, scheiterte jedoch sehr oft und was mich besonders störte: Meistens fand ich bis zuletzt nicht heraus warum und lernte deshalb nicht sehr viel aus meinen Fehlern. Mit gemässigten Ambitionen, setzte ich mir kleinere Ziele welche ich eher erreichen konnte. Ich wandte die zuvor erlernte Methode (siehe "loadImage, redraw & random") an um Bilder von Politikern am Ende jedes Asts erscheinen zu lassen. Mein Ziel nächstes Ziel war es die Abweichewinkel der Äste zu vereinheitlichen, wozu ich aber Werte generieren musste, die mit einer 50%-Chance den einen oder anderen Wert (und NUR diesen) annahmen. David riet mit zu folgender Codezeile:<code> (random(0, 1)&amp;gt;0.5) ? 200 : -200;Von da an ging es zügig voran und ich verbrachte noch sehr viel Zeit mit fraktalen Spielereien. Meine Faszination galt besonders der Eigendynamik - die ich zwar beeinflussen - aber nie gänzlich kontrollieren konnte. Als ich auf einer Zugreise dabei war, fünfeckige fraktale Muster mit bestimmten Farbverläufen zu generieren, wurde ich allen Ernstes von einem Chemielaboranten darauf angesprochen, ob ich mich schon lange mit „der Struktur von Calcium“ befasse. Welch glorreicher Tag: Ich habe nicht nur die gewünschte Ästhetik erreicht, sondern das Vorkommen fraktaler Muster in der Naturwissenschaft täuschend echt immitiert.
<code> float f=10; int x; int y; void setup() { size(1200, 800); randomSeed(millis()); smooth(); strokeWeight(5); noLoop(); println("erstes mal: " + f); } void draw() { // stroke(random(10, 110), random(0, 180), random(180, 255), 130); pushMatrix(); background(0, 0, 0, 255); translate (width*.5, height*0.8); wurzel(15); popMatrix(); } void mousePressed() { loop(); //redraw(); } void mouseReleased() { f = 0; noLoop(); } void wurzel(int tiefe) { if (tiefe 0.5) ? 100 : -100; int count = (int)random(1, 4); for (int i = 0; i 0.5) ? 5 : -5); scale(.8); wurzel(tiefe-1); //popStyle(); popMatrix(); f=f+.003; println(f); } }