import processing.opengl.*; /* Projekt von Sebastian Graetz: Generative Grafiken. Durch sich drehende Striche entstehen Kreiskonstruktionen, die der Anwender sowohl zufällig als auch nahezu komplett kontrolliert beeinflussen kann. Zur besseren †berprüfung der Inter- aktion steht unten links ein Interface zur Verfügung. Die mšglichen Aktionen stehen ja am Rand als Kommentar... Probleme gab es nicht!*g* */ float a = 0.2; //Rotationsvariable innerer Strichkreis float b = 1; //Rotationsvariable äußerer Strichkreis float s = 100; //Radius des Inneren Kreises int counter = 0; //Zähler void setup() { size(800, 600, OPENGL); //Größe des Zeichenbereichs, OpenGL implementiert background(0); //schwarzer Hintergrund... } void draw() { pushMatrix(); // erste Matrix (innerer Strichkreis) geöffnet noSmooth(); // keine weichen Kanten translate(mouseX,mouseY); // Zeichenbereich zur Mouseposition verschieben rotate(a); // Rotation innerer Strichkreis if (keyPressed){ stroke(0, 150); // bei nicht definierter Taste schwarze Striche if (key == 'p') { saveFrame("GSC###.tif"); // speichert das aktuell gezeichnete als Bild } if (key == ' ') { background(0); // bei SPACE Neustart } if (key == 'x') { // bei X keine Striche noStroke(); } if (key == 'r') { stroke(255, 0, 0, 50); // bei R rote Striche } if (key == 'g'){ stroke(0, 200, 0, 50); // bei G grüne Striche } if (key == 'b'){ stroke(0, 0, 255, 50); // bei B blaue Sriche } } else stroke(255, 50); // keine Taste gedrückt: weiße Striche line(0, 0, s, s); // Strich vom Mauszeiger bis s pushMatrix(); // zweite Matrix (äußerer Strichkreis) geöffnet rotate(b); // Rotation äußerer Strichkreis) line(width, 0, s, s); // Strich von der rechten Ecke bis s b--; // gegen den Uhrzeigersinn popMatrix(); // zweite Matrix (äußerer Strichkreis) geschlossen a = a + 0.2; // mit dem Uhrzeigersinn popMatrix(); // erste Matrix (innerer Strichkreis) geschlossen counter++; //Zähler zählt sich hoch if (counter > 50) { //Bei 51 wird ein stark transparentes schwarzes Rechteck fill(0, 1); //über den Zeichenbereich gelegt, damit nicht irgendwann noStroke(); //alles farbig ist und zu hell wird rect(0, 0, width, height); counter = 0; //Zähler zurückgesetzt } display(); //HUD } void display() { //HUD pushMatrix(); //the matrix has you... smooth(); //weiche Kanten (klappt in OPENGL nur dürftig) translate(0, 450); //runtersetzen des Zeichenbereichs fill(0); stroke(255); rect(0, 0, 150, 149); //Display-Bereich if (keyPressed){ if (key == 'r') { fill(255, 0, 0); //bei R roter Kreis } if (key == 'g'){ fill(0, 200, 0); //bei G grüner Kreis } if (key == 'b'){ fill(0, 0, 255); //bei B blauer Kreis } } else fill(255); //ansonsten weißer Kreis ellipse(75, 75, s, s); //Kreis mit der Länge des inneren Strichkreises als Durchmesser popMatrix(); //the matrix has you ...noooot! } void mouseDragged() { //Wenn die Mouse bei gedrückter Mousetaste bewegt wird,... if (keyPressed) { //...wird bei gedrückter Taste if (key == 'x') { //...X,... if ( mouseX < width) { //...wenn die Mouse nicht rechts außerhalb des Zeichenbereichs ist,... s = mouseX / 6; //...die Größe des Strichkreises durch die Mouseposition bestimmt. } else s = width / 6; //Ist sie es doch, wird einfach der größte Wert eingesetzt if (mouseX < 0) { //Ist sie links aus dem Zeichenbereich raus,... s = 1; //... dann hat der Strichkreis den Radius 1. } } else s=random(10, width / 6); //Und ohne X passiert das ganze zufällig. Man kann aber nicht ganz so klein. } else s=random(10, width / 6); //Weils so schön war, nochmal. Soll ja auch ohne gedrückte Taste gehen. display(); //HUD }