Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1496536
  • 博文数量: 218
  • 博客积分: 6394
  • 博客等级: 准将
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-08 15:33
个人简介

持之以恒

文章分类

全部博文(218)

文章存档

2013年(8)

2012年(2)

2011年(21)

2010年(55)

2009年(116)

2008年(16)

分类: C/C++

2009-04-08 15:50:17

假设由四个点的一个多边形,需要进行旋转a度,给定原先的坐标点的位置,求新的坐标点的位置

解法:使用计算机图形学中的旋转矩阵

——              ——         ——          ——
| Point1,Point2  |        |  cos   -sin |
| Point3,Point4  |   *    |  sin   cos  | =新的点坐标位置矩阵
——              ——         ——          ——

下面的程序实现了一个自己画的图的旋转
//参数 pt 当前屏幕中心点的坐标,当a = 0时,为没有旋转的坐标点的位置,注意屏幕是以左上角为中心点的

CBrush brush;
brush.CreateSolidBrush(RGB(100, 100, 255));
CPen pen;
pen.CreatePen(0, 1, RGB(100, 100, 255));
memoryDC->SelectObject(brush);
POINT pts[4];//多边形的四个点
//注意:因为绘图画线有先后顺序的原因,这里的点是有顺序的!!
//使用了旋转矩阵
//cos -sin

//sin cos

pts[0].x = pt.x + (-12) * sinResult;
pts[0].y = pt.y + (-12) * cosResult;
pts[1].x = pt.x + (-10) * cosResult +(6) * sinResult;
pts[1].y = pt.y + (10) * sinResult + 6 * cosResult;
pts[2] = pt;
pts[3].x = pt.x + 10 * cosResult + (6) * sinResult;
pts[3].y = pt.y + (-10) * sinResult + 6 * cosResult;
memoryDC->SelectObject(pen);
memoryDC->Polygon(pts, 4);
brush.DeleteObject();
pen.DeleteObject();

阅读(2888) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~