| Code: // clock.c - Simple Clock // Alexander@Shabarshin.com // 13 Mar 2007
int myround(float f) { int i; i=f; if(f-i>0.5) i=i+1; return i; }
mycircle(int x, int y, int r) { int xx,yl,yi; float yy,dx,dr; dr=r;dr=dr*dr;yl=0; for(xx=x-r+1;xx<=x+r;xx++) { dx=xx-x; yy=sqrt(dr-dx*dx); yi=myround(yy); line(1,xx-1,y-yl,xx,y-yi); line(1,xx-1,y+yl,xx,y+yi); yl=yi; } }
strelka(int c, int x, int y, int l, float a) { line(c,x,y,x-myround(l*cos(a)),y-myround(l*sin(a))); }
main() { int i,j,g,h,m,x1,y1,x2,y2; string s; float fa,fx,fy,fp,fs,fi,fo,fh,fm,fc; int x=80; int y=87; int r=70; int g0=51; int g1=58; int g2=63; int g3=67; int s1=35; int s2=42; int s3=45; graph_on(); title("Clock"); textalign(11); mycircle(x,y,r); fp=2*asin(1); fs=fp/30; i=0; for(fa=0;fa<fp+fp;fa=fa+fs) { if(i>=60) break; fi=sin(fa);fo=cos(fa); //puts("@"+fa+" "+fo+":"+fi+"\n"); if(i%5) g=g2; else { g=g1; j=i/5+3; if(j>12) j=j-12; s=j; text(x+myround(g0*fo),y+myround(g0*fi),s); } line(1,x+myround(g*fo),y+myround(g*fi),x+myround(g3*fo),y+myround(g3*fi)); i++; } fh=0;fm=0;fc=0;j=0; while(1) { while(1) { i=time(2); h=i/10000; i=i-h*10000; m=i/100; i=i-m*100; if(i!=j) break; } j=i; strelka(0,x,y,s3,fc); strelka(0,x,y,s2,fm); strelka(0,x,y,s1,fh); fc=(i+15)*fs; fm=(m+15)*fs; fh=(h*5+m/12+15)*fs; strelka(1,x,y,s1,fh); strelka(1,x,y,s2,fm); strelka(1,x,y,s3,fc); } }
| |