手机版
你好,游客 登录 注册
背景:
阅读新闻

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

[日期:2018-05-21] 来源:Linux社区  作者:junjunjun123 [字体: ]

编译环境:VS2017

编译框架:MFC

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

实验步骤:

  1.打开VS2017,并创建MFC项目,具体方法参见:https://www.linuxidc.com/Linux/2018-05/152476.htm

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

void CMFCApplication10View::Ontransfor()
{
    // TODO: 在此添加命令处理程序代码
    CDC *pDC = GetDC();
    double Q = 15;                    //顺时针旋转角度(单位为度)
    double c = 0.5, d = 0.5;            //x,y缩放倍数
    double e = 100, f = 0;            //x,y平移量
    //转换为弧度
    Q = Q / 180 * 3.1415926;
    //初始三角形
    CPoint pts[3];
    //几何变换后的三角形
    CPoint zf[3];
    //存放临时的初始坐标
    double TJ[3];
    //存放临时的转换后的坐标
    double SX[3];
    //给坐标点赋初始值
    pts[0].x = 100, pts[0].y = 50;
    pts[1].x = 300, pts[1].y = 50;
    pts[2].x = 200, pts[2].y = 100;
    //计算三角形的中心坐标(a,b)
    double a = (pts[0].x + pts[1].x + pts[2].x) / 3;
    double b = (pts[0].y + pts[1].y + pts[2].y) / 3;
    //复合变换矩阵,将设置的几何变换参数综合到此变换矩阵中
    double R[3][3] =
    { { c*cos(Q)  ,          d*sin(Q) ,                0 },
    { -c * sin(Q) ,          d*cos(Q),                0 },
    { c*(-a*cos(Q)+b*sin(Q))+a+e,d*(-a*sin(Q)-b*cos(Q))+b+f,1 }};
    for (int i = 0; i<3; i++)        //i表示三角形的第i个点
    {

        TJ[0] = pts[i].x;
        TJ[1] = pts[i].y;
        TJ[2] = 1;
        for (int j = 0; j<3; j++)        //j表示矩阵的第j列
        {
            SX[j] = TJ[0] * R[0][j] + TJ[1] * R[1][j] + TJ[2] * R[2][j];
        }
        zf[i].x = SX[0];
        zf[i].y = SX[1];
    }
    //输出初始的图形
        pDC->Polygon(pts, 3);
    //输出集合变换后的图形
        pDC->Polygon(zf, 3);
}

另有在VS2017中无需加上 #include "math.h" ,其他版本可能需要加上

3.运行结果如下:效果为三角形沿其中心缩小为其原来的1/2,再以其中心为原点顺时针旋转15度,最后向右平移100个像素点(参见代码)

本文永久更新链接地址https://www.linuxidc.com/Linux/2018-05/152477.htm

linux
相关资讯       C++ 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款