这几天在学习计算机图形学,做了一个线段的平移,具体说应该是线段的复制。
这段代码输出的只有原先自己画的直线,并没有显示平移后的直线:
1 #include "graphics.h" 2 #include "stdio.h" 3 void main() 4 { 5 int gdriver,gmode; 6 int i,j,k; 7 int a[2][3]={{10,10,1},{200,200,1}}; 8 int b[3][3]={{1,0,0},{0,1,0},{100,200,1}}; 9 int c[2][3]={0}; 10 //矩阵乘法 11 for(i=0;i<2;i++) 12 for(j=0;j<3;j++) 13 for(k=0;k<3;k++) 14 { 15 c[i][j]+=a[i][k]*b[k][j]; 16 } 17 18 /*for(i=0;i<2;i++) 19 { 20 for(j=0;j<3;j++) 21 printf("%d ",c[i][j]); 22 printf("\n"); 23 }*/ 24 gdriver=DETECT; 25 initgraph(&gdriver,&gmode,"D:\\Program Files\\Win-TC\\projects"); 26 line(10,10,200,200); 27 setcolor(12); 28 getch(); 29 line(c[0][0],c[0][1],c[1][0],c[1][1]); 30 getch(); 31 closegraph(); 32 }
起初,把矩阵乘法写在initgraph()函数之前了,没有得到想要的结果,我觉得是文本模式被图形模式覆盖了,所以看不到变换后的矩阵输出了。而把矩阵乘法写到initgraph()函数之后,结果就是我要实现的了。正确代码:(把注释的文字删去,否则,有可能编译会出错)使用的是Win-TC编译器
1 #include "graphics.h" 2 #include "stdio.h" 3 void main() 4 { 5 int gdriver,gmode; 6 int i,j,k; 7 int a[2][3]={{10,10,1},{200,200,1}}; 8 int b[3][3]={{1,0,0},{0,1,0},{100,200,1}}; 9 int c[2][3]={0}; 10 gdriver=DETECT; 11 initgraph(&gdriver,&gmode,"D:\\Program Files\\Win-TC\\projects"); 12 //矩阵乘法 13 for(i=0;i<2;i++) 14 for(j=0;j<3;j++) 15 for(k=0;k<3;k++) 16 { 17 c[i][j]+=a[i][k]*b[k][j]; 18 } 19 20 /*for(i=0;i<2;i++) 21 { 22 for(j=0;j<3;j++) 23 printf("%d ",c[i][j]); 24 printf("\n"); 25 }*/ 26 line(10,10,200,200); 27 setcolor(12); 28 getch(); 29 line(c[0][0],c[0][1],c[1][0],c[1][1]); 30 getch(); 31 closegraph(); 32 }