The implementation of Scaling Transformation in C++

来源:转载

Hi,today we make aProgram to illustrate the implementation of Scaling Transformation.it is Short and Simple program we try to make it Simple and Easy.

// Developer : ijaz Rs khAn & Bilal tahir

// Email : [email protected]

// Compiler : Microsoft Visual Studio 2012

// Comp. Date: 2-11-2015

// *******************************************

Program to illustrate the implementation of Scaling Transformation

Source Code of Program

# include <iostream.h>// for input output standerd# include <graphics.h>//for textcolor & textbackground# include <conio.h>//for clrscr()# include <math.h>// for math function# define f 0.3# define projection_angle 45void show_screen( );//void functionavoid apply_scaling(int [8][3],constfloat,constfloat,constfloat);void multiply_matrices(constfloat[4],constfloat[4][4],float[4]);void draw_cube(int [8][3])void get_projected_point(int&,int&,int&);void Line(constint,constint,constint,constint);int main( )// main function{int driver=VGA;// intialize variableint mode=VGAHI;initgraph(&driver,&mode,"..//codeblah");// for add grahicsshow_screen( );// screen showint cube[8][3]={{270,200,50},{370,200,50},{370,300,50},{270,300,50},{270,200,-50},{370,200,-50},{370,300,-50},};setcolor(15);draw_cube(cube);setcolor(20);// for using colorsettextstyle(0,0,1);outtextxy(50,415,"*** Using + and - Keys to apply Scaling. :)");//int key_code=0;char Key=NULL;do // do loop{Key=NULL;key_code=0;if(key_code==0){Key=getch( );key_code=int(Key);}if(key_code==27)// if conditionbreak;// new lineelseif(key_code==43)// else if condition{setfillstyle(1,0);bar(40,70,600,410);apply_scaling(cube,1.1,1.1,1.1);setcolor(15);draw_cube(cube);}elseif(key_code==45){setfillstyle(1,0);bar(40,70,600,410);apply_scaling(cube,0.9,0.9,0.9);setcolor(12);draw_cube(cube);}}while(1);return 0;}constfloat Sy,constfloat Sz){for(int count=0;count<8;count++)// for loop{float matrix_a[4]={edge_points[count][0],edge_points[count][1],edge_points[count][2],1};float matrix_b[4][4]={ { Sx,0,0,0 } , { 0,Sy,0,0 } ,{ 0,0,Sz,0 } ,{ 0,0,0,1 } };float matrix_c[4]={0};multiply_matrices(matrix_a,matrix_b,matrix_c);}}constfloat matrix_2[4][4],float matrix_3[4]){for(int count_1=0;count_1<4;count_1++){for(int count_2=0;count_2<4;count_2++)// for loopmatrix_3[count_1]+=(matrix_1[count_2]*matrix_2[count_2][count_1]);}}{for(int i=0;i<8;i++)// for loopget_projected_point(edge_points[i][0],edge_points[i][1],edge_points[i][2]);Line(edge_points[0][0],edge_points[0][1],edge_points[1][0],edge_points[1][1]);Line(edge_points[1][0],edge_points[1][1],edge_points[2][0],edge_points[2][1]);Line(edge_points[2][0],edge_points[2][1],edge_points[3][0],edge_points[3][1]);Line(edge_points[3][0],edge_points[3][1],edge_points[0][0],edge_points[0][1]);Line(edge_points[0][0],edge_points[0][1],edge_points[4][0],edge_points[4][1]);Line(edge_points[1][0],edge_points[1][1],edge_points[5][0],edge_points[5][1]);Line(edge_points[2][0],edge_points[2][1],edge_points[6][0],edge_points[6][1]);Line(edge_points[3][0],edge_points[3][1],edge_points[7][0],edge_points[7][1]);}{float fcos0=(f*cos(projection_angle*(M_PI/180)));float fsin0=(f*sin(projection_angle*(M_PI/180)));float Par_v[4][4]={{1,0,0,0},{0,1,0,0},{fcos0,fsin0,0,0},{0,0,0,1}};float xy[4]={x,y,z,1};float new_xy[4]={0};multiply_matrices(xy,Par_v,new_xy);x=(int)(new_xy[0]+0.5);y=(int)(new_xy[1]+0.5);z=(int)(new_xy[2]+0.5);}{int color=getcolor( );// get colorint x1=x_1;int y1=y_1;int x2=x_2;int y2=y_2;if(x_1>x_2){x1=x_2;y1=y_2;x2=x_1;y2=y_1;}int dx=abs(x2-x1);int dy=abs(y2-y1);int inc_dec=((y2>=y1)?1:-1);if(dx>dy){int two_dy=(2*dy);int two_dy_dx=(2*(dy-dx));int p=((2*dy)-dx);int x=x1;int y=y1;putpixel(x,y,color);while(x<x2){x++;if(p<0)p+=two_dy;else{y+=inc_dec;p+=two_dy_dx;}putpixel(x,y,color);}}else{int two_dx=(2*dx);int two_dx_dy=(2*(dx-dy));int p=((2*dx)-dy);int x=x1;int y=y1;putpixel(x,y,color);while(y!=y2){y+=inc_dec;if(p<0)p+=two_dx;else{x++;p+=two_dx_dy;}putpixel(x,y,color);}}}{setfillstyle(1,1);bar(218,26,413,38);settextstyle(0,0,1);setcolor(15);outtextxy(5,5,"*******************");outtextxy(5,17,"*-********************-*");outtextxy(5,29,"*-------------- ---------*");outtextxy(5,41,"*-********************-*");outtextxy(5,53,"*-**************-*");setcolor(18);// set colorouttextxy(226,29,"***Scaling Transformation***");setcolor(15);for(int count=0;count<=30;count++)outtextxy(5,(65+(count*12)),"*-* *-*");outtextxy(5,438,"*-***************************-*");outtextxy(5,450,"*--------- -------------*");outtextxy(5,462,"*******************");setcolor(12);outtextxy(229,450,"***Press any Key to exit****.");}

if you Face any problem in This code Freely contact us.Give your Feed back.Thank you



分享给朋友:
您可能感兴趣的文章:
随机阅读: