Le 5 barre verticali indicano rispettivamente
- ore, da 0 a 12
- minuti (decine), da 0 a 5
- minuti (unità), da 0 a 9
- secondi (decine), da 0 a 5
- secondi (unità), da 0 a 9
Nell’orologio originale (si tratta di un prodotto commerciale) non compare l’indicazione dei secondi.
color sfondo, spento, acceso; neolog orologio; void setup() { size(500, 240); frameRate(4); orologio=new neolog(100, 200); sfondo=color(255); } void draw() { background(sfondo); orologio.aggiorna(); } class neolog { int posX, posY; tratto[] tratti; color acceso, spento; int alto, largo, distX, distY; neolog(int x, int y) { posX=x; posY=y; tratti=new tratto[40]; acceso=color(255, 0, 255); spento=color(100, 0, 100); largo=55; alto=6; distX=5; distY=5; setta(); } void setta() { // ore tratti[ 0]=new tratto(acceso, spento, 0, -( alto ), largo, alto); tratti[ 1]=new tratto(acceso, spento, 0, -( 2*alto+ distY), largo, alto); tratti[ 2]=new tratto(acceso, spento, 0, -( 3*alto+ 2*distY), largo, alto); tratti[ 3]=new tratto(acceso, spento, 0, -( 5*alto+ 4*distY), largo, alto); tratti[ 4]=new tratto(acceso, spento, 0, -( 6*alto+ 5*distY), largo, alto); tratti[ 5]=new tratto(acceso, spento, 0, -( 7*alto+ 6*distY), largo, alto); tratti[ 6]=new tratto(acceso, spento, 0, -( 9*alto+ 8*distY), largo, alto); tratti[ 7]=new tratto(acceso, spento, 0, -(10*alto+ 9*distY), largo, alto); tratti[ 8]=new tratto(acceso, spento, 0, -(11*alto+10*distY), largo, alto); tratti[ 9]=new tratto(acceso, spento, 0, -(13*alto+12*distY), largo, alto); tratti[10]=new tratto(acceso, spento, 0, -(14*alto+13*distY), largo, alto); tratti[11]=new tratto(acceso, spento, 0, -(15*alto+14*distY), largo, alto); // minuti decine tratti[12]=new tratto(acceso, spento, largo+distX, -( alto ), largo, alto); tratti[13]=new tratto(acceso, spento, largo+distX, -( 2*alto+ distY), largo, alto); tratti[14]=new tratto(acceso, spento, largo+distX, -( 3*alto+ 2*distY), largo, alto); tratti[15]=new tratto(acceso, spento, largo+distX, -( 5*alto+ 4*distY), largo, alto); tratti[16]=new tratto(acceso, spento, largo+distX, -( 6*alto+ 5*distY), largo, alto); // minuti unità tratti[17]=new tratto(acceso, spento, 2*(largo+distX), -( alto ), largo, alto); tratti[18]=new tratto(acceso, spento, 2*(largo+distX), -( 2*alto+ distY), largo, alto); tratti[19]=new tratto(acceso, spento, 2*(largo+distX), -( 3*alto+ 2*distY), largo, alto); tratti[20]=new tratto(acceso, spento, 2*(largo+distX), -( 5*alto+ 4*distY), largo, alto); tratti[21]=new tratto(acceso, spento, 2*(largo+distX), -( 6*alto+ 5*distY), largo, alto); tratti[22]=new tratto(acceso, spento, 2*(largo+distX), -( 7*alto+ 6*distY), largo, alto); tratti[23]=new tratto(acceso, spento, 2*(largo+distX), -( 9*alto+ 8*distY), largo, alto); tratti[24]=new tratto(acceso, spento, 2*(largo+distX), -(10*alto+ 9*distY), largo, alto); tratti[25]=new tratto(acceso, spento, 2*(largo+distX), -(11*alto+10*distY), largo, alto); // secondi decine tratti[26]=new tratto(acceso, spento, 3*(largo+distX), -( alto ), largo, alto); tratti[27]=new tratto(acceso, spento, 3*(largo+distX), -( 2*alto+ distY), largo, alto); tratti[28]=new tratto(acceso, spento, 3*(largo+distX), -( 3*alto+ 2*distY), largo, alto); tratti[29]=new tratto(acceso, spento, 3*(largo+distX), -( 5*alto+ 4*distY), largo, alto); tratti[30]=new tratto(acceso, spento, 3*(largo+distX), -( 6*alto+ 5*distY), largo, alto); // secondi unità tratti[31]=new tratto(acceso, spento, 4*(largo+distX), -( alto ), largo, alto); tratti[32]=new tratto(acceso, spento, 4*(largo+distX), -( 2*alto+ distY), largo, alto); tratti[33]=new tratto(acceso, spento, 4*(largo+distX), -( 3*alto+ 2*distY), largo, alto); tratti[34]=new tratto(acceso, spento, 4*(largo+distX), -( 5*alto+ 4*distY), largo, alto); tratti[35]=new tratto(acceso, spento, 4*(largo+distX), -( 6*alto+ 5*distY), largo, alto); tratti[36]=new tratto(acceso, spento, 4*(largo+distX), -( 7*alto+ 6*distY), largo, alto); tratti[37]=new tratto(acceso, spento, 4*(largo+distX), -( 9*alto+ 8*distY), largo, alto); tratti[38]=new tratto(acceso, spento, 4*(largo+distX), -(10*alto+ 9*distY), largo, alto); tratti[39]=new tratto(acceso, spento, 4*(largo+distX), -(11*alto+10*distY), largo, alto); } void aggiorna() { int h, md, mu, sd, su; h=hour(); if(h > 12) h=h-12; md=minute(); mu=md%10; md=md/10; sd=second(); su=sd%10; sd=sd/10; pushMatrix(); translate(posX, posY); fill(25); stroke(75); rect(-distX, -15*alto-15*distY, 5*largo+6*distX, 15*alto+16*distY); // ore for(int i=0; i < h; i++) tratti[i].accendi(); for(int i=h; i < 12; i++) tratti[i].spegni(); // minuti decine for(int i=0; i < md; i++) tratti[12+i].accendi(); for(int i=md; i < 5; i++) tratti[12+i].spegni(); // minuti unità for(int i=0; i < mu; i++) tratti[17+i].accendi(); for(int i=mu; i < 9; i++) tratti[17+i].spegni(); // secondi decine for(int i=0; i < sd; i++) tratti[26+i].accendi(); for(int i=sd; i < 5; i++) tratti[26+i].spegni(); // secondi unità for(int i=0; i < su; i++) tratti[31+i].accendi(); for(int i=su; i < 9; i++) tratti[31+i].spegni(); popMatrix(); } } class tratto { color colore, colore_on, colore_off; int posX, posY, largo, alto; tratto(color on, color off, int x, int y, int l, int a) { colore_on=on; colore_off=off; posX=x; posY=y; largo=l; alto=a; spegni(); } void accendi() { colore=colore_on; disegna(); } void spegni() { colore=colore_off; disegna(); } void disegna() { fill(colore); stroke(colore); rect(posX, posY, largo, alto); } }