Monday, September 16, 2013

Tagged Under: ,

ANALOG CLOCK C PROGRAM

Share
Analog clock c program

THIS IS A PROGRAM IN COMPUTER GRAPHICS THAT SIMULATES THE WORKING OF A WALL CLOCK.IT SHOWS THE TICKING OF A CLOCK USING HOURS ,MINUTES AND SECONDS HAND.


Implementation in C


#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<dos.h>
 
// Calculates new co-ordinates of a figure after 
// rotating it at an angle about a point (cx,cy)
void rotate( int figure[], int edges, double angle, int cx, int cy )
{
 double x, y;
 angle = -1 * (angle*3.14/180);
 double cos_a = cos(angle);
 double sin_a = sin(angle);
 
 for(int i=0; i < edges; i++)
 {
  x = figure[2*i] - cx;
  y = figure[2*i+1] - cy;
  figure[2*i] = floor( (x * cos_a) - (y * sin_a) + cx + 0.5 );
  figure[2*i+1] = floor( (x * sin_a)+(y * cos_a) + cy + 0.5 );
 }
}
 
void drawClock(int,int,int);
 
void main()
{
 int second_hand[4],minute_hand[4], hour_hand[4], edges = 2 ;
 double angle;
 int cx=300, cy=200;
 int gd = DETECT, gm;
 initgraph( &gd, &gm, "" );
 int max_y = getmaxy();
 clrscr();
 cleardevice();
 
 angle = -6;
 
 // Set the initial position of the second, minute and the hour hands.
 
 second_hand[0] = cx ;
 second_hand[1] = max_y - cy;
 second_hand[2] = cx;
 second_hand[3] = max_y - 320;
 
 hour_hand[0] = cx;
 hour_hand[1] = max_y - cy;
 hour_hand[2] = cx + 90;
 hour_hand[3] = max_y - 200;
 
 minute_hand[0] = cx;
 minute_hand[1] = max_y - cy;
 minute_hand[2] = cx;
 minute_hand[3] = max_y - 310;
 
 cleardevice();
 setbkcolor(WHITE);
 
 // Draw the clock
 drawClock(cx,max_y - cy,150);
 setlinestyle(SOLID_FILL,0,1);
 
 // Draw the minute and the hour hand
 drawpoly(2,minute_hand);
 drawpoly(2,hour_hand);
 
 int i=0;
 while(!kbhit()) {
  setcolor(RED);
  drawpoly(2,second_hand);
  setcolor(GREEN);
  drawpoly(2,minute_hand);
  setcolor(BLUE);
  drawpoly(2,hour_hand);
  delay(1000);   // set delay(10) to tick the clock fast
  setcolor(15);
  drawpoly(2,second_hand);
  rotate(second_hand,edges,angle,cx,max_y - cy);
  i++;
 
  // Reset the second hand and move the minute hand 
  // when the second hand has moved 60 times.
  if(i%60 == 0) {
   second_hand[0] = cx ;
   second_hand[1] = max_y - cy;
   second_hand[2] = cx;
   second_hand[3] = max_y - 320;
   drawpoly(2,minute_hand);
   rotate(minute_hand,edges,angle,cx,max_y - cy);
  }
 
  // Move the minute hand 
  // when the second hand has moved 720 (60*12) times.
  if(i%720 == 0) {
   i = 0;
   drawpoly(2,hour_hand);
   rotate(hour_hand,edges,angle,cx,max_y - cy);
  }
 
 }
 
 getch();
}
 
// Function to draw the clock 
void drawClock(int cx, int cy, int r) {
 setcolor(GREEN);
 setlinestyle(SOLID_FILL,0,3);
 circle(cx,cy,r);
 
 int max_y = getmaxy();
 int center[2] = {cx, max_y - 340};
 
 for(int i=0; i<60; i++) {
  if(i%5 == 0) {
   circle(center[0],center[1],2);
  } else {
   circle(center[0],center[1],1);
  }
  rotate(center,1,-6,cx,cy);
 }
}