Sechs Kursabende à vier Stunden an der EB Zürich
Kurskonzeption und Leitung Hanna Züllig
/* Autorin: Nadja Kümin based on: / P_2_2_4_01.pde // // Generative Gestaltung, ISBN: 978-3-87439-759-9 // First Edition, Hermann Schmidt, Mainz, 2009 // Hartmut Bohnacker, Benedikt Gross, Julia Laub, Claudius Lazzeroni // Copyright 2009 Hartmut Bohnacker, Benedikt Gross, Julia Laub, Claudius Lazzeroni Kurs: Einblick in die generative Gestaltung mit processing ip971231 Kursleitung: Hanna Zuellig Veroeffentlicht unter der creative common license Attribution-NonCommercial-ShareAlike CC BY-NC-SA http://creativecommons.org/licenses/ */ //Wachstumsstruktur: Punkte werden neben vorherigen Punkt platziert //max. Anzahl Kreise int maxCount = 5000; int currentCount = 1; float[] x = new float[maxCount]; float[] y = new float[maxCount]; //Radius float[] r = new float[maxCount]; void setup() { size(800, 800); smooth(); //Festlegung erster Kreis x[0] = width/2; y[0] = height/2; r[0] = 20; } void draw() { background(255); noFill(); //Radius und Position werdern zufällig festgelegt. float newR = random(1, 7); float newX = random(0+newR, width-newR); float newY = random(0+newR, height-newR); float closestDist = 100000000; int closestIndex = 0; //Abfrage, welcher der Kreise am nächsten ist. Ist Distanz kleiner als alle anderen, wird ein Referenzwert in die Variable "closestIndex" gespeichert. for(int i=0; i < currentCount; i++) { float newDist = dist(newX,newY, x[i],y[i]); if (newDist < closestDist) { closestDist = newDist; closestIndex = i; } } //Neuer Kreis wird exakt neben dem nächst gelegenen Kreis positioniert. Dies geschieht durch Winkelberechnung mittels "atan2" float angle = atan2(newY-y[closestIndex], newX-x[closestIndex]); x[currentCount] = x[closestIndex] + cos(angle) * (r[closestIndex]+newR); y[currentCount] = y[closestIndex] + sin(angle) * (r[closestIndex]+newR); r[currentCount] = newR; currentCount++; //Kreise zeichnen for (int i=0 ; i < currentCount; i++) { int Alpha = 20+i/4; fill(0, 35, 75, Alpha); stroke(0, 35, 75, Alpha+5); ellipse(x[i],y[i], r[i]*2,r[i]*2); } if (currentCount >= maxCount) noLoop(); }