这几天在学习计算机图形学,做了一个线段的平移,具体说应该是线段的复制。

这段代码输出的只有原先自己画的直线,并没有显示平移后的直线:

 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 }

相关文章:

  • 2021-09-07
  • 2022-02-06
  • 2021-10-03
  • 2021-08-08
  • 2021-07-15
  • 2022-12-23
  • 2022-01-04
  • 2022-02-21
猜你喜欢
  • 2021-10-22
  • 2022-12-23
  • 2021-08-16
  • 2021-09-01
  • 2022-01-07
  • 2022-01-07
  • 2022-12-23
相关资源
相似解决方案