使用C++实现图形的旋转、缩放、平移
编译环境: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++实现图形的旋转、缩放、平移的更多相关文章
- OpenGL绘制简单场景,实现旋转缩放平移和灯光效果
本项目实现了用OpenGL绘制一个简单场景,包括正方体.球体和网格,实现了物体的旋转.缩放.平移和灯光效果.附有项目完整代码.有具体凝视.适合刚開始学习的人熟悉opengl使用. 开发情况 开发环境V ...
- Unity3d物体模型(实现旋转缩放平移自动旋转)
基本功能实现:物体通过鼠标左键上下移动,中间键缩放.右键旋转,30秒没操作,物体自动旋转 实例代码: using UnityEngine; using System.Collections; publ ...
- osg矩阵变换节点-----平移旋转缩放
osg矩阵变换节点-----平移旋转缩放 转自:http://www.cnblogs.com/ylwn817/articles/1973396.html 平移旋转缩放这个三个是osg矩阵操作中,最常见 ...
- osg中使用MatrixTransform来实现模型的平移/旋转/缩放
osg中使用MatrixTransform来实现模型的平移/旋转/缩放 转自:http://www.cnblogs.com/kekec/archive/2011/08/15/2139893.html# ...
- OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图
读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...
- Eigen库实现简单的旋转、平移操作
本来课程要求用GUI界面来实现Eigen的旋转.平移操作的,但是接触GUI编程时间太短,虽然要求很简单,但是做了几天还是没有完成.就把命令行下面的简单的贴一下吧. main.cpp #include ...
- Android图片旋转,缩放,位移,倾斜,对称完整示例(一)——imageView.setImageMatrix(matrix)和Matrix
MainActivity如下: import android.os.Bundle; import android.view.MotionEvent; import android.view.View; ...
- CSS3旋转缩放移动倾斜等效果——transform
1.transform浏览器支持情况 也就是说目前不考虑老浏览器的话是不用加前缀的,感谢菜鸟教程:https://www.runoob.com/cssref/css3-pr-transform.htm ...
- VTK中模型的旋转与平移
当从外界读入STL等三维模型时,其会按照它内部的坐标位置进行显示.因此它的位置和大小是确定的.但是在实际应用中,有可能需要人为地对这个模型在空间中进行旋转.平移或缩放等操作.VTK中有许多和旋转.平移 ...
- Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix
MainActivity例如以下: import android.os.Bundle; import android.view.MotionEvent; import android.view.Vie ...
随机推荐
- 开源电子商务平台:OfBiz
OFBiz是一个电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系统的框架. ...
- PO订单审批通过API
DECLARE l_return_status VARCHAR2(1); l_exception_msg VARCHAR2(4000); BEGIN mo_global.set_policy_cont ...
- Leetcode_96_Unique Binary Search Trees
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43198929 Given n, how many stru ...
- 《java入门第一季》之面向对象
之前的代码描述都是基于面向过程的,今天开始正式进入面向对象的世界.什么是对象?首先要区分类和对象的概念-- 现实世界中是如何描述一个事物的? 举例:学生 姓名,年龄,性别... 学习,吃饭,睡觉 属性 ...
- OpenCV 矩形轮廓检测
转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/44151213, 来自:shiter编写程序的艺术 基础介绍 OpenCV里提取目 ...
- AngularJS进阶(八)实现页面跳转并进行参数传递
angularjs实现页面跳转并进行参数传递 注:请点击此处进行充电! Angular页面传参有多种办法,我在此列举4种最常见的: 1. 基于ui-router的页面跳转传参 (1) 在Angular ...
- "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)
博文“二分图的最大匹配.完美匹配和匈牙利算法”对二分图相关的几个概念讲的特别形象,特别容易理解.本文介绍部分主要摘自此博文. 还有其他可参考博文: 趣写算法系列之--匈牙利算法 用于二分图匹配的匈牙利 ...
- 使IFRAME在iOS设备上支持滚动
原文链接: Scroll IFRAMEs on iOS原文日期: 2014年07月02日 翻译日期: 2014年07月10日翻译人员: 铁锚很长时间以来, iOS设备上Safari中超出边界的元素将不 ...
- 如何修改linux开机运行配置脚本
开机运行级别的配置角本 /etc/inittab 开机运行级别 init 是切换运行级别的指令 0.关机 //init0 1.单用户模式(自动获取超级用户权限,无网络,无服 ...
- 十大ios开发者喜爱的开源库
十大ios开发者喜爱的开源库 (转自博客园) 2014-08-17 14:07:58| 分类: objective-c | 标签:ios 开源库 |举报|字号 订阅 下载LOFTER我的照片书 ...