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…)