/* Program CIRCLE_6.C ** ** Draws circle travleing along a line. ** Illustrates use of structures. ** ** Needs work in calculating angles of reflection. ** ** P. H. Anderson, 21 Nov, 94 */ #include <stdio.h> #include <graphics.h> #include <conio.h> #include <math.h> #define PI 3.14159 struct Line { int x; int y; float angle; }; struct Line draw_circles_along_line(struct Line *line); void glock(void); void main(void) { int driver, mode, n; struct Line line, new_line; line.x = 0; line.y=250; line.angle=0.0; driver = DETECT; /* autotect*/ mode = 0; initgraph(&driver, &mode, "c:\\turboc"); line.x = 50; line.y=250; line.angle=30.0; while(1) { new_line = draw_circles_along_line(&line); glock(); line = new_line; } restorecrtmode(); /* restores the screen to the original screen */ } struct Line draw_circles_along_line(struct Line *line) { int n; float distance = 2.0, r=25, x, y; struct Line new_line; for (n=0;;n++) { x = (*line).x + distance * n * cos(PI/180.0 * (*line).angle); y = (*line).y - distance * n * sin(PI/180.0 * (*line).angle); if(x<25) { new_line.angle = 180.0 - 2.0 * (*line).angle;; new_line.x = x+1; new_line.y = y; return(new_line); } if(x>650) { new_line.angle = -180.0 + 2.0 * (*line).angle; new_line.x = x-1; new_line.y = y; return(new_line); } if (y<25) { new_line.angle = - (*line).angle; new_line.x = x; new_line.y = y+1; return(new_line); } if (y>450) { new_line.angle = - (*line).angle;; new_line.x = x; new_line.y = y-1; return(new_line); } setcolor(BLUE); circle(x, y, r); /* setfillstyle(1, RED); floodfill(x, y, BLUE); */ delay(1); /* setfillstyle(1, BLACK); floodfill(x, y, BLUE); */ setcolor(BLACK); circle(x, y, r); } } void glock(void) /* wierd sound */ { int n; for (n=0; n<50; n++) { sound(440+n); delay(1); } nosound(); }