float dimA=PI/100,
PI6=PI/6,
Xc, Yc,
angoloX=0, angoloY=0,angoloZ=0,
raggio, diametro;
color blu, verde, rosso, grigio, grigio1, grigio2;
Lancetta LS, LM, LH;
float S, M, H;
Ora[] LeOre=new Ora[12];
void setup()
{
size(500, 500, P3D);
frameRate(30);
noStroke();
smooth();
Xc=width/2; Yc=height/2;
diametro=0.8*min(width, height);
raggio=diametro/2;
blu =color( 0, 0, 255);
verde =color( 0, 255, 0);
rosso =color(255, 0, 0);
grigio1=color( 0, 0, 0);
grigio2=color(127, 127, 127);
for(int i=0; i < 12; i++)
LeOre[i]=new Ora(i);
LH = new Lancetta(diametro*0.3, diametro*0.06, blu , -5);
LM = new Lancetta(diametro*0.4, diametro*0.04, verde, 0);
LS = new Lancetta(diametro*0.5, diametro*0.02, rosso, +5);
}
void keyPressed()
{
if(keyCode==RIGHT) angoloY += dimA;
else if(keyCode==LEFT) angoloY -= dimA;
else if(keyCode==UP) angoloX += dimA;
else if(keyCode==DOWN) angoloX -= dimA;
else if(keyCode=='a' || keyCode == 'A') angoloZ -= dimA;
else if(keyCode=='z' || keyCode == 'Z') angoloZ += dimA;
else
{
angoloX=0;
angoloY=0;
angoloZ=0;
}
}
void draw()
{
background(255);
lights();
translate(Xc, Yc, 0);
rotateX(angoloX);
rotateY(angoloY);
rotateZ(angoloZ);
for(int i=0; i < 12; i++)
LeOre[i].disegna();
S=second();
M=minute()+S/60;
H=hour()+M/60;
LH.aggiorna((TWO_PI/12)*H-HALF_PI);
LM.aggiorna((TWO_PI/60)*M-HALF_PI);
LS.aggiorna((TWO_PI/60)*S-HALF_PI);
}
class Ora
{
int h;
Ora(int cheOra) { h = cheOra; }
void disegna()
{
if(h==0) fill(grigio1);
else fill(grigio2);
pushMatrix();
rotateZ(h*PI6-HALF_PI);
translate(raggio, 0, 0);
box(20,12,4);
popMatrix();
}
}
class Lancetta
{
float lunga, alta, livello;
color colore;
Lancetta(float lun, float alt, color col, float liv)
{
lunga=lun;
alta=alt;
colore=col;
livello=liv;
}
void aggiorna(float angolo)
{
fill(colore);
pushMatrix();
rotateZ(angolo);
translate(lunga/2-alta, 0, livello);
box(lunga, alta, 4);
popMatrix();
}
}