void setup() { size(600,600); background(0); smooth(); frameRate(10); PFont font; font = loadFont("OCRAbyBT-Regular-20.vlw"); textFont(font, 20); } void draw() { fill(0,0,0,20); rect(0,0,width,height); rekursion(width/2, height/2, startIndex); } void mousePressed() { // background(0); // rekursion(width/2, height/2, startIndex); r = random(1,255); // bei mausklick farben neu setzen - RANDOM g = random(1,255); b = random(1,255); } float r = 255; // rot float g = 255; // gruen float b = 255; // blau int rr = 0; // richtung rot (1 = aufsteigend, 0 = absteigend) int rg = 0; // richtung rot (1 = aufsteigend, 0 = absteigend) int rb = 0; // richtung rot (1 = aufsteigend, 0 = absteigend) int startIndex = 3; int zaehler = 1; // REKURSIONS FUNKTION void rekursion(float x, float y, int index) { // als abbruchbedingung ist 1 geeignet // abbruchbedingung - wenn 1 erreicht -> RETURN (raus aus der funktion) if(index <= 0) { return; } int anzahl = int(random(3)); strokeWeight(index); int durchmesser = int(index * 3); // durchmesser der kugeln setzen for (int i = 0; i <= anzahl; i = i +1) { float schranke = 100 * index / startIndex; // println("index: " + index+" : startIndex: "+startIndex); float xR = x + random(-schranke, schranke); float yR = y + random(-schranke, schranke); //println(index+":"+xR+":"+yR); stroke(r,g,b); // strichfarbe weiss fill(r,g,b); line(x, y, xR, yR); ellipse(xR, yR, durchmesser, durchmesser); // innerste ellipse, gefüllt, weiss noStroke(); // strichestärke auf null fill(r,g,b,160); ellipse(xR, yR, durchmesser * 2, durchmesser * 2); // zweite ellipse, gefüllt, transparent fill(r,g,b,80); ellipse(xR, yR, durchmesser * 3, durchmesser * 3); // dritte ellipse, gefüllt, noch transparenter zaehler = zaehler + 1; // farben verändern if ((r < 255 ) && (rr == 1)) { // rot kleiner 255 - richtung aufsteigend r = r + 1; rr = 1; // richtung bleibt aufsteigend } else if (( r < 255) && (rr == 0)) { // rot kleiner 255 - richtung absteigend r = r - 1; rr = 0; // richtung bleibt absteigend } else if (( r >= 255) && (rr == 1)) { // rot >= 255 - richtung aufsteigend // r = r - 1; rr = 0; // richtung auf absteigend setzen } else if (( r < 1) && (rr == 0)) { // rot < 1, richtung absteigend r = r + 1; rr = 1; // richtung auf aufsteigend } else if (( r < 1) && (rr == 1)) { // rot < 1, richtung aufsteigend r = r + 1; rr = 1; // richtung auf aufsteigend } println(r + ":" + rr); // zaehler noStroke(); fill(0,0,0,100); // füllung auf halbtransparentes schwarz rect(15,15,100,100); // halbtransparentes rechteck über zähler fill(r,g,b); // farbe wieder auf weiss setzen text(zaehler, 15, 35); // zähler schreiben rekursion(xR, yR, index - 1); } }