/* Program: pumpkin3.c Draw a pumpkin. Function version. */ #include #include "genlib.h" #include "simpio.h" #include "graphics.h" /* Use math library */ #include #define PI 3.14159 /* Function Prototypes */ double deg2rad (double angle) ; void DrawEye(double eye_size) ; /* Convert degree to radians */ double deg2rad ( double angle ) { return (PI * angle / 180.0 ) ; } /* Draw an eye */ void DrawEye(double eye_size) { DrawLine(-eye_size/2, 0.0) ; DrawLine(eye_size/2, eye_size) ; DrawLine(eye_size/2, -eye_size) ; DrawLine(-eye_size/2, 0.0) ; } main() { double max_x, max_y ; double mid_x, mid_y ; double i, j ; /* Initialize graphics routines */ InitGraphics() ; max_x = GetWindowWidth() ; max_y = GetWindowHeight() ; mid_x = max_x / 2.0 ; mid_y = max_y / 2.0 ; for (i = -1 ; i <= 1 ; i++) for (j=-1 ; j <= 1 ; j++) draw_pumpkin(mid_x + 1.5 * i, mid_y + 1.5 * j, 0.5, 60.0) ; } void draw_pumpkin(double x_loc, double y_loc, double pumpkin_size, double pump_ang) { double x, y, top, eye_offset ; double radius, start, sweep ; top = y_loc + pumpkin_size * sin(deg2rad(pump_ang)) ; eye_offset = pumpkin_size * cos(deg2rad(pump_ang)) ; /*** Draw stem */ MovePen(x_loc, top ) ; DrawLine(-pumpkin_size/8.0, 3*pumpkin_size/8.0); DrawLine(pumpkin_size/4.0, 0.0 ) ; DrawLine(-pumpkin_size/8.0, -3*pumpkin_size/8.0); /*** Draw right side of pumpkin */ MovePen(x_loc, top) ; start = 180.0 - pump_ang ; sweep = 360.0 - 2 * pump_ang ; DrawArc(pumpkin_size, start, -sweep ) ; /*** Draw left side of pumpkin */ start = -pump_ang ; DrawArc(pumpkin_size, start, -sweep ) ; /*** Draw Eyes */ MovePen(x_loc + eye_offset, y_loc) ; DrawEye(pumpkin_size/4.0) ; MovePen(x_loc - eye_offset, y_loc) ; DrawEye(pumpkin_size/4.0) ; /* Draw Mouth */ radius = pumpkin_size / 2.0 ; start = 270.0 - pump_ang ; sweep = 2 * pump_ang ; x = x_loc + radius * cos(deg2rad(start)) ; y = y_loc + radius * sin(deg2rad(start)) ; MovePen(x,y) ; DrawArc(radius, start, sweep); radius = radius * sin(deg2rad(pump_ang)) ; DrawArc(radius, 0.0, -180.0 ) ; }