#include #include #include /*struct point{ int x; int y; } pts[3];*/ void main() { int gd = DETECT; int gm = DETECT; float rm[3][3],tm[3][3],sm[3][3],sum,c[3][3]; int i,j,k; float rx1,rx2,rx3,ry1,ry2,ry3,sx,sy,xr,yr,a; float pm[3][3]; float theta; initgraph(&gd,&gm,"c:\\tc\\bgi"); printf(" ENTER THE FIRST POINT : "); scanf("%f%f",&xa,&ya); printf(" ENTER THE SECOND POINT : "); scanf("%f%f",&xb,&yb); printf(" ENTER THE THIRD POINT : "); scanf("%f%f",&xc,&yc); pts[0].x = 50;pts[0].y = 50; pts[1].x = 150;pts[1].y = 50; pts[2].x = 100;pts[2].y = 200; printf("Enter rotation angle"); scanf("%f",&a); printf("Enter the co-ordinates about which you want to rotate"); printf("xr yr:"); scanf("%f%f",&xr,&yr); printf("Enter the co-ordinates about which you want to scale"); printf("sx sy:"); scanf("%f %f",&sx,&sy); for(i = 0; i < 2;i++) { line(pts[i].x,pts[i].y,pts[i+1].x,pts[i+1].y); } line(pts[i].x,pts[i].y,pts[0].x,pts[0].y); getch(); theta = a * 3.14/180; rm[0][0] = cos(theta); rm[0][1] = -sin(theta); rm[0][2]= xr*(1-cos(theta))+sin(theta)*yr; rm[1][0]=sin(theta); rm[1][1]=cos(theta); rm[1][2]=yr*(1-cos(theta))-sin(theta)*xr; rm[2][0]=0; rm[2][1]=0; rm[2][2]=1; pm[0][0] = pts[0].x; pm[0][1] = 0; pm[0][2] = 0; pm[1][0] = pts[0].y; pm[1][1] = 1; pm[1][2] = 0; pm[2][0] = 1; pm[2][1] = 0; pm[2][2] = 1; for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum=0; for(k=0;k<3;k++) { sum=sum+(rm[i][k]*pm[k][j]); } c[i][j]= sum; } } rx1 = c[0][0]; ry1 = c[1][0]; pm[0][0] = pts[1].x; pm[0][1] = 0; pm[0][2] = 0; pm[1][0] = pts[1].y; pm[1][1] = 1; pm[1][2] = 0; pm[2][0] = 1; pm[2][1] = 0; pm[2][2] = 1; for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum=0; for(k=0;k<3;k++) { sum=sum+rm[i][k]*pm[k][j]; } c[i][j]= sum; } } rx2 = c[0][0]; ry2 = c[1][0]; pm[0][0] = pts[2].x; pm[0][1] = 0; pm[0][2] = 0; pm[1][0] = pts[2].y; pm[1][1] = 1; pm[1][2] = 0; pm[2][0] = 1; pm[2][1] = 0; pm[2][2] = 1; for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum=0; for(k=0;k<3;k++) { sum=sum+rm[i][k]*pm[k][j]; } c[i][j]= sum; } } rx3 = c[0][0]; ry3 = c[1][0]; printf("enter the scaling factor sx,sy"); scanf("%f %f",&sx,&sy); sm[0][0]=sx; sm[0][1]=0; sm[0][2]=100*(1-sx); sm[1][0]=0; sm[1][1]=sy; sm[1][2]=100*(1-sy); sm[2][0]=0; sm[2][1]=0; sm[2][2]=1; pts[0].x=rx1; pts[0].y=ry1; pts[1].x=rx2; pts[1].y=ry2; pts[2].x=rx3; pts[2].y=ry3; pm[0][0] = pts[0].x; pm[0][1] = 0; pm[0][2] = 0; pm[1][0] = pts[0].y; pm[1][1] = 1; pm[1][2] = 0; pm[2][0] = 1; pm[2][1] = 0; pm[2][2] = 1; for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum=0; for(k=0;k<3;k++) { sum=sum+(sm[i][k]*pm[k][j]); } c[i][j]= sum; } } rx1 = c[0][0]; ry1 = c[1][0]; pm[0][0] = pts[1].x; pm[0][1] = 0; pm[0][2] = 0; pm[1][0] = pts[1].y; pm[1][1] = 1; pm[1][2] = 0; pm[2][0] = 1; pm[2][1] = 0; pm[2][2] = 1; for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum=0; for(k=0;k<3;k++) { sum=sum+sm[i][k]*pm[k][j]; } c[i][j]= sum; } } rx2 = c[0][0]; ry2 = c[1][0]; pm[0][0] = pts[2].x; pm[0][1] = 0; pm[0][2] = 0; pm[1][0] = pts[2].y; pm[1][1] = 1; pm[1][2] = 0; pm[2][0] = 1; pm[2][1] = 0; pm[2][2] = 1; for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum=0; for(k=0;k<3;k++) { sum=sum+sm[i][k]*pm[k][j]; } c[i][j]= sum; } } rx3 = c[0][0]; ry3 = c[1][0]; line(rx1,ry1,rx3,ry3); line(rx3,ry3,rx2,ry2); line(rx2,ry2,rx1,ry1); getch(); }