编译环境:VS2017

编译框架:MFC

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

实验步骤:

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

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

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

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

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

  

原创声明:此博客为作者原创,欢迎转载,转载时请指明出处,作者:我有点帅哦http://www.cnblogs.com/junjunjun123/p/9011952.html

使用C++实现图形的旋转、缩放、平移的更多相关文章

  1. OpenGL绘制简单场景,实现旋转缩放平移和灯光效果

    本项目实现了用OpenGL绘制一个简单场景,包括正方体.球体和网格,实现了物体的旋转.缩放.平移和灯光效果.附有项目完整代码.有具体凝视.适合刚開始学习的人熟悉opengl使用. 开发情况 开发环境V ...

  2. Unity3d物体模型(实现旋转缩放平移自动旋转)

    基本功能实现:物体通过鼠标左键上下移动,中间键缩放.右键旋转,30秒没操作,物体自动旋转 实例代码: using UnityEngine; using System.Collections; publ ...

  3. osg矩阵变换节点-----平移旋转缩放

    osg矩阵变换节点-----平移旋转缩放 转自:http://www.cnblogs.com/ylwn817/articles/1973396.html 平移旋转缩放这个三个是osg矩阵操作中,最常见 ...

  4. osg中使用MatrixTransform来实现模型的平移/旋转/缩放

    osg中使用MatrixTransform来实现模型的平移/旋转/缩放 转自:http://www.cnblogs.com/kekec/archive/2011/08/15/2139893.html# ...

  5. OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图

    读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...

  6. Eigen库实现简单的旋转、平移操作

    本来课程要求用GUI界面来实现Eigen的旋转.平移操作的,但是接触GUI编程时间太短,虽然要求很简单,但是做了几天还是没有完成.就把命令行下面的简单的贴一下吧. main.cpp #include ...

  7. Android图片旋转,缩放,位移,倾斜,对称完整示例(一)——imageView.setImageMatrix(matrix)和Matrix

    MainActivity如下: import android.os.Bundle; import android.view.MotionEvent; import android.view.View; ...

  8. CSS3旋转缩放移动倾斜等效果——transform

    1.transform浏览器支持情况 也就是说目前不考虑老浏览器的话是不用加前缀的,感谢菜鸟教程:https://www.runoob.com/cssref/css3-pr-transform.htm ...

  9. VTK中模型的旋转与平移

    当从外界读入STL等三维模型时,其会按照它内部的坐标位置进行显示.因此它的位置和大小是确定的.但是在实际应用中,有可能需要人为地对这个模型在空间中进行旋转.平移或缩放等操作.VTK中有许多和旋转.平移 ...

  10. Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix

    MainActivity例如以下: import android.os.Bundle; import android.view.MotionEvent; import android.view.Vie ...

随机推荐

  1. 【Visual C++】游戏编程学习笔记之一:五毛钱特效之透明和半透明处理

    本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44163799 作者:ZeeCod ...

  2. Android FrameWork浅识

    接收讯息及事件 储存共享数据 处理UI互动的事情 幕后服务(播放背景音乐) 在框架的手中,它的生命的周期完全由框架来控制,new也是由框架.它的逻辑调用则是自己实现,确保强龙的地位 框架反向来控制相应 ...

  3. java开发中几种常见的线程池

    线程池 java.util.concurrent:Class Executors 常用线程池 几种常用的的生成线程池的方法: newCachedThreadPool newFixedThreadPoo ...

  4. ROS探索总结(十二)——坐标系统

    在机器人的控制中,坐标系统是非常重要的,在ROS使用tf软件库进行坐标转换. 相关链接:http://www.ros.org/wiki/tf/Tutorials#Learning_tf 一.tf简介 ...

  5. Linux文件系统及常用命令

    Linux文件系统介绍: 一 .Linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法.主要体现在对文件和目录的组织上.目录提供了管理文件的一个方便而有效的途径. Linux使用树状目录结 ...

  6. 图像处理程序框架—MFC相关知识点

    CDC:Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 . MFC基础类库定义了设备环境对象类----CDC类. CDC与CGdiObject的关系 说道 ...

  7. Linux 系统应用编程——标准I/O

    标准I/O的由来         标准I/O指的是ANSI C 中定义的用于I/O操作的一系列函数. 只要操作系统安装了C库,标准I/O函数就可以调用.换句话说,如果程序中使用的是标准I/O函数,那么 ...

  8. Oracle :%TYPE 和 %ROWTYPE

    1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...

  9. ELF 动态链接 - so 的 重定位表

    动态链接下,无论时可执行文件还是共享对象,一旦对其他共享对象有依赖,也就是所有导入的符号时,那么代码或数据中就会有对于导入符号的引用.而在编译时期这些导入符号的确切地址时未知的.只有在运行期才能确定真 ...

  10. 关于减少BUG的思考

    开发之前,就要先设计,理清好思路:如果需求都不清楚,软件肯定有缺陷: 和客户.测试的沟通 如果开发出来的东西本身就有BUG,交给测试,会浪费很多人的时间. 开发做完一个功能后,要自己做一遍测试 自己的 ...