Function:
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 ); } }
C Program
#include<graphics.h> #include<stdio.h> #include<conio.h> #include<math.h> 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] = ceil( (x * cos_a) - (y * sin_a) + cx ); figure[2*i+1] = ceil( (x * sin_a)+(y * cos_a) + cy ); } } void main() { int figure[20], edges; // A Figure with Max 10 edges. double angle; int cx=0, cy=0; int gd = DETECT, gm; initgraph( &gd, &gm, "" ); int max_y = getmaxy(); clrscr(); cleardevice(); printf( "Number of edges: " ); scanf( "%d", &edges ); for (int i=0; i < edges; i++) { printf( "Enter edge (x%d,y%d) : ", i , i ); scanf( "%d %d", &figure[2*i], &figure[2*i+1] ); } figure[2*i] = figure[0]; figure[2*i+1] = figure[1]; edges += 1; printf( "Enter angle of rotation in degrees: "); scanf( "%lf", &angle); printf( "Enter the center of rotation: \n"); printf( "cx: "); scanf( "%d", &cx); printf( "cy: "); scanf( "%d", &cy); cy = max_y - cy; cleardevice(); setbkcolor(WHITE); setcolor(GREEN); setlinestyle(SOLID_LINE, 0, 3); drawpoly( edges, figure ); getch(); for (int i=0; i < edges; i++) figure[2*i+1] = max_y - figure[2*i+1]; rotate(figure,edges,angle,cx,cy); for (int i=0; i < edges; i++) figure[2*i+1] = max_y - figure[2*i+1]; setcolor(RED); drawpoly( edges, figure ); getch(); }