码迷,mamicode.com
首页 > 编程语言 > 详细

使用C++实现图形的旋转、缩放、平移

时间:2018-05-15 15:58:12      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:html   width   nsf   三角形   程序代码   使用   cat   void   etc   

编译环境:VS2017

编译框架:MFC

实验内容:显示一个三角形,并将其绕中心进行旋转、缩放以及平移等操作

实验步骤:

  1.打开VS2017,并创建MFC项目,具体方法参见:http://www.cnblogs.com/junjunjun123/p/8811150.html

  2.在新建的执行程序中加入如下代码

 1 void CMFCApplication1View::OnGeo_transfor()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     
 5         CDC *pDC=GetDC();
 6     double Q=15;                    //顺时针旋转角度(单位为度)
 7     double c=0.5,d=0.5;            //x,y缩放倍数
 8     double e=100,f=0;            //x,y平移量
 9     
10        //转换为弧度 
11         Q=Q/180*3.1415926;
12 
13     //初始三角形
14         CPoint pts[3];
15         //几何变换后的三角形
16     CPoint zf[3];
17         //存放临时的初始坐标
18     double TJ[3];
19         //存放临时的转换后的坐标
20         double SX[3];
21       
22         //给坐标点赋初始值 
23     pts[0].x=100,pts[0].y=50;
24     pts[1].x=300,pts[1].y=50;
25     pts[2].x=200,pts[2].y=100;
26         //计算三角形的中心坐标(a,b)
27     double a=(pts[0].x+pts[1].x+pts[2].x)/3;
28     double b=(pts[0].y+pts[1].y+pts[2].y)/3;
29     
30         //复合变换矩阵,将设置的几何变换参数综合到此变换矩阵中
31     double R[3][3]=
32     {{ c*cos(Q)  ,                 d*sin(Q) ,                         0},
33     {  -c*sin(Q) ,                d*cos(Q),                    0},
34     {  c*(-a*cos(Q)+b*sin(Q))+a+e , d*(-a*sin(Q)-b*cos(Q))+b+f ,  1}};
35     
36         
37     for(int i=0;i<3;i++)        //i表示三角形的第i个点
38     {
39     
40         TJ[0]=pts[i].x;
41         TJ[1]=pts[i].y;
42         TJ[2]=1;
43             for(int j=0;j<3;j++)        //j表示矩阵的第j列
44             {
45                 SX[j]=TJ[0]*R[0][j]+TJ[1]*R[1][j]+TJ[2]*R[2][j];
46                 
47             }
48             zf[i].x=SX[0];
49             zf[i].y=SX[1];
50     }
51     输出初始的图形
52     pDC->Polygon(pts,3);
53         输出集合变换后的图形
54     pDC->Polygon(zf,3);
55 
56         /*CRect rectDlg;
57     GetClientRect(rectDlg);//获取窗体的大小
58     int h=rectDlg.Height();
59     int w=rectDlg.Width();
60     */    
61 
62 }                                                                        

 

使用C++实现图形的旋转、缩放、平移

标签:html   width   nsf   三角形   程序代码   使用   cat   void   etc   

原文地址:https://www.cnblogs.com/junjunjun123/p/9011952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!