/* THIS PROGRAM IS TO TRANSLATE , ROTATE & SCALE THE FIGURE */ /* ABOUT ANY ARBITARY POINT ON THE SCREEN */ #include #include #include #include #define pi 3.14 #define maxsize 3 float xa,ya,xb,yb,xc,yc; float xa1,ya1,xb1,yb1,xc1,yc1; float xr,yr,sa,sb; float a[3][3],b[3][3],c[3][3],d[3][3],e[3][3],f[3][3],ra,r; float g[3][3],h[3][3],q[3][3],z[3][3],w[3][3],sx,sy,sum; float identity[3][3]; void multiply(float [3][3],float[3][3]); main() { int i,j; int gm=DETECT,gd=DETECT; initgraph(&gm,&gd,"c:\\turboc\\bgi"); clrscr(); 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); clrscr(); line(xa,ya,xb,yb); line(xb,yb,xc,yc); line(xc,yc,xa,ya); getche(); printf(" * ENTER THE POINTS FROM WHICH THE TRIANGLE HAS TO ROTATE : "); scanf("%f%f",&xr,&yr); printf(" * ENTER THE ANGLE THROUGH WHICH YOU WANT TO ROTATE THE TRIANGLE : "); scanf("%f",&r); printf(" * ENTER THE POINTS OF SCALING : "); scanf("%f %f",&sa,&sb); printf("\n ENTER THE SCALING PARAMETERS i.e Sx and Sy :"); scanf("%f%f",&sx,&sy); ra=(r*pi)/180.0; set_identity(a); a[0][0]=cos(ra); a[0][1]=-sin(ra); a[1][0]=sin(ra); a[1][1]=cos(ra); set_identity(b); b[0][2]= -xr; b[1][2]= -yr; multiply(a,b); set_identity(c); c[0][2]=xr; c[1][2]=yr; multiply(c,d); set_identity(z); z[0][2]=-sa; z[1][2]=-sb; multiply(z,d); set_identity(q); q[0][0]=sx; q[1][1]=sy; multiply(q,d); set_identity(w); w[0][2]=sa; w[1][2]=sb; multiply(w,d); for(i=0;i<3;i++) { for(j=0;j<3;j++) { e[i][j]=d[i][j]; } } set_identity(f); f[0][0]=xa; f[1][0]=ya; f[2][0]=1; multiply(e,f); xa1=d[0][0]; ya1=d[1][0]; set_identity(g); g[0][0]=xb; g[1][0]=yb; g[2][0]=1; multiply(e,g); xb1=d[0][0]; yb1=d[1][0]; set_identity(h); h[0][0]=xc; h[1][0]=yc; h[2][0]=1; multiply(e,h); xc1=d[0][0]; yc1=d[1][0]; clrscr(); line(xa,ya,xb,yb); line(xb,yb,xc,yc); line(xc,yc,xa,ya); line(xa1,ya1,xb1,yb1); line(xb1,yb1,xc1,yc1); line(xc1,yc1,xa1,ya1); getch(); } void multiply(float a[3][3],float b[3][3]) { int i,j,k; for(i=0;i<3;i++) { for(j=0;j<3;j++) { sum=0; for(k=0;k<3;k++) { sum=sum+a[i][k]*b[k][j]; } d[i][j] = sum; } } } set_identity(float a[3][3]) { int i,j; for(i=0;i