Vai al contenuto

Orologio analogico

2013-02: Graphical

Create a visually fun clock.

Soluzione

La lancetta ruota con il passare del tempo…

xc=GraphicsWindow.Width /2
yc=GraphicsWindow.Height/2
 
Pi2   =Math.Pi/2
DELTA =2*Math.Pi/60
RAGGIO=yc*0.8
 
GraphicsWindow.PenColor  ="Red"
GraphicsWindow.BrushColor="Red"
GraphicsWindow.PenWidth  =5
 
While "true" 
  tempo =Clock.Second
  angolo=-DELTA*tempo+Pi2 
  
  x=xc+RAGGIO*Math.Cos(angolo)
  y=yc-RAGGIO*Math.Sin(angolo) 
  
  GraphicsWindow.Clear()
  GraphicsWindow.FillEllipse(xc-5,yc-5,10,10)
  GraphicsWindow.DrawLine(xc,yc,x,y) 
  
  Program.Delay(500)
EndWhile

Lancette delle ore, minuti e secondi disegnate più volte al secondo

DIM=500
GraphicsWindow.Width =DIM
GraphicsWindow.Height=DIM
xc=DIM/2
yc=DIM/2

hh =1
mm =2
ss =3
Pi2=Math.Pi/2

raggio[hh]=yc*0.5
raggio[mm]=yc*0.65
raggio[ss]=yc*0.8
delta[hh]=2*Math.Pi/12
delta[mm]=2*Math.Pi/60
delta[ss]=2*Math.Pi/60
colore[hh]="Blue"
colore[mm]="Green"
colore[ss]="Red"
penna[hh]=12
penna[mm]=8
penna[ss]=4
r[hh]=14
r[mm]=10
r[ss]=6
d[hh]=2*r[hh]
d[mm]=2*r[mm]
d[ss]=2*r[ss]

While "true" 
  tempo[ss]=Clock.Second
  tempo[mm]=Clock.Minute+tempo[ss]/60
  tempo[hh]=Clock.Hour  +tempo[mm]/60
  
  angolo[hh]=-delta[hh]*tempo[hh]+Pi2
  angolo[mm]=-delta[mm]*tempo[mm]+Pi2
  angolo[ss]=-delta[ss]*tempo[ss]+Pi2
  
  GraphicsWindow.Clear()  
  GraphicsWindow.PenWidth  =penna[hh]
  GraphicsWindow.PenColor  =colore[hh]
  GraphicsWindow.BrushColor=colore[hh]
  GraphicsWindow.FillEllipse(xc-r[hh],yc-r[hh],d[hh],d[hh])
  x=xc+raggio[hh]*Math.Cos(angolo[hh])
  y=yc-raggio[hh]*Math.Sin(angolo[hh])
  GraphicsWindow.DrawLine(xc,yc,x,y)
  
  GraphicsWindow.PenWidth  =penna[mm]
  GraphicsWindow.PenColor  =colore[mm]
  GraphicsWindow.BrushColor=colore[mm]
  GraphicsWindow.FillEllipse(xc-r[mm],yc-r[mm],d[mm],d[mm])
  x=xc+raggio[mm]*Math.Cos(angolo[mm])
  y=yc-raggio[mm]*Math.Sin(angolo[mm])
  GraphicsWindow.DrawLine(xc,yc,x,y)
  
  GraphicsWindow.PenWidth =penna[ss]
  GraphicsWindow.PenColor =colore[ss]
  GraphicsWindow.BrushColor=colore[ss]
  GraphicsWindow.FillEllipse(xc-r[ss],yc-r[ss],d[ss],d[ss])
  x=xc+raggio[ss]*Math.Cos(angolo[ss])
  y=yc-raggio[ss]*Math.Sin(angolo[ss])
  GraphicsWindow.DrawLine(xc,yc,x,y)
  
  Program.Delay(500)
EndWhile

Lo sfondo può essere un quadrante fisso

hh =1
mm =2
ss =3
Pi2=Math.Pi/2

q =ImageList.LoadImage(Program.Directory+"\quadrante.png")
qw=ImageList.GetWidthOfImage(q)
qh=ImageList.GetHeightOfImage(q)

GraphicsWindow.Width =qw
GraphicsWindow.Height=qh
xc=qw/2
yc=qh/2

raggio[hh]=yc*0.5
raggio[mm]=yc*0.65
raggio[ss]=yc*0.8
delta[hh]=2*Math.Pi/12
delta[mm]=2*Math.Pi/60
delta[ss]=2*Math.Pi/60
colore[hh]="Blue"
colore[mm]="Green"
colore[ss]="Red"
penna[hh]=12
penna[mm]=8
penna[ss]=4
r[hh]=14
r[mm]=10
r[ss]=6
d[hh]=2*r[hh]
d[mm]=2*r[mm]
d[ss]=2*r[ss]

While "true" 
  tempo[ss]=Clock.Second
  tempo[mm]=Clock.Minute+tempo[ss]/60
  tempo[hh]=Clock.Hour  +tempo[mm]/60
  
  angolo[hh]=-delta[hh]*tempo[hh]+Pi2
  angolo[mm]=-delta[mm]*tempo[mm]+Pi2
  angolo[ss]=-delta[ss]*tempo[ss]+Pi2
  
  GraphicsWindow.DrawImage(q,0,0)
  
  GraphicsWindow.PenWidth  =penna[hh]
  GraphicsWindow.PenColor  =colore[hh]
  GraphicsWindow.BrushColor=colore[hh]
  GraphicsWindow.FillEllipse(xc-r[hh],yc-r[hh],d[hh],d[hh])
  x=xc+raggio[hh]*Math.Cos(angolo[hh])
  y=yc-raggio[hh]*Math.Sin(angolo[hh])
  GraphicsWindow.DrawLine(xc,yc,x,y)
  
  GraphicsWindow.PenWidth  =penna[mm]
  GraphicsWindow.PenColor  =colore[mm]
  GraphicsWindow.BrushColor=colore[mm]
  GraphicsWindow.FillEllipse(xc-r[mm],yc-r[mm],d[mm],d[mm])
  x=xc+raggio[mm]*Math.Cos(angolo[mm])
  y=yc-raggio[mm]*Math.Sin(angolo[mm])
  GraphicsWindow.DrawLine(xc,yc,x,y)
  
  GraphicsWindow.PenWidth =penna[ss]
  GraphicsWindow.PenColor =colore[ss]
  GraphicsWindow.BrushColor=colore[ss]
  GraphicsWindow.FillEllipse(xc-r[ss],yc-r[ss],d[ss],d[ss])
  x=xc+raggio[ss]*Math.Cos(angolo[ss])
  y=yc-raggio[ss]*Math.Sin(angolo[ss])
  GraphicsWindow.DrawLine(xc,yc,x,y)
  
  Program.Delay(500)
EndWhile

L’immagine del quadrante è fissa (salva l’immagine nella stessa cartella del codice…)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.