5. Oktober 2012
Eine sehr offene Aufgabe. Wir müssen eine Uhr nach unseren Vorstellungen zu kreieren und dabei programmiertechnisch und gestalterisch einen Weg finden unsere Ideen umzusetzen. Inspiriert von einem Tutorial in welchem gezeigt wird, wie man blinkende Sterne animiert, begann ich mit einem Art Radar. Wenn in der draw Funktion der Background als tranparent definiert wird ergibt dies eine Art Shader Effekt da er sich mit jedem Frame wieder überlagert. So ziehen die animierten Objekte eine Art Schweif hinter sich her. Die Assoziation zu einem sehr abstrakten Planetensystem liegt nahe. In diesem Projekt habe ich bis jetzt am meisten gelernt da ich viele schon verinnerlichte Techniken kombinieren und auch neue Techniken entdecken musste um mein Ziel zu erreichen. Mit Hilfe der map Funktion und dem lieben Pi gelang es mir nach langem experimentieren eine funktionierende Uhr zu programmieren. Im Endprodukt repräsentieren einzelne „Planeten“ jeweils Stunden, Minuten und Sekunden. Die länge der Schweife ist über die Tasten ‚m’ und ‚l’ (more/less) in Echtzeit veränderbar. Mit einem Klick auf die Maus wird er neu gestartet. Die Zeit ist einigermassen gut ablesbar. Die Uhr wirkt ein wenig hypnotisch, die Bewegungen sind sehr fliessend und weich. Ich wollte die Uhr schlicht und einfach gestallten, darum auch die Entscheidung zu Schwarz und Weiss. Ich habe fast das Gefühl ich verstehe nun die grösseren Zusammenhänge und Code ist nicht mehr nur beliebiges Wirrwar.float schweif = 3; float rot = 0; float s; float m; float h; float RadiansVerschiebung; float MillisRadians; void keyPressed() { if (key == 'l') {schweif++;} // less, Schweif wird kleiner if (key == 'm') {schweif--;} // more, Schweif wird grösser } void setup(){ size(700,700); noStroke(); smooth(); RadiansVerschiebung = map(second(),0,59,0,TWO_PI) - HALF_PI; //HALF_PI verschiebt eine Viertelumdrehung nach oben weil radians beginnt rechts. } void draw(){ if(mousePressed){ fill(0); } else { fill(0, schweif); } rect(0, 0, width, height); fill(255,5); MillisRadians = map (millis(), 0, (1000 * 60), 0, TWO_PI) + RadiansVerschiebung; m = map(minute() + norm(second(), 0, 60), 0, 60, 0, TWO_PI) - HALF_PI; h = map(hour() + norm(minute(), 0, 60), 0, 24, 0, TWO_PI * 2) - HALF_PI; fill(random(200, 255)); //stunde pushMatrix(); translate(width/2, height/2); rotate(h); ellipse(163,0, 75, 75); popMatrix(); //minute pushMatrix(); translate(width/2, height/2); rotate(m); ellipse(95,0, 50, 50); popMatrix(); //sekunde pushMatrix(); translate(width/2, height/2); rotate(MillisRadians); ellipse(49,0, 30, 30); popMatrix(); fill(255, 200); pushMatrix(); translate(width/2,height/2); rot += 0.02; // rot = rot + 1 rotate (rot); ellipse(115, 115, 75, 75); ellipse(35, 35, 30, 30); ellipse(5, 5, 5, 5); popMatrix(); pushMatrix(); translate(width/2,height/2); rot += 0.02; // rot = rot + 1 rotate (-rot); ellipse(15, 15, 15, 15); ellipse(67, 67, 50, 50); ellipse(183, 183, 105, 105); popMatrix(); }