如何编程实现二维图形的旋转

原创 2015年11月18日 13:28:53

         把每个顶点绕原点旋转,实现图形的旋转。这个问题就等价于,已知原坐标(x,y)和旋转角度B,求旋转过后的的坐标(x1,y1);下面推导一下,

设顶点到原点距离为r,对应矢量与x轴夹角A,则:

                    x=r cosA,

                    y=rsinA,

                    x1=rcos(A+B)=rcosAcosB-rsinAsinB,

                   y1=rsin(A+B)=rsinAcosB+rcosAsinB;

           再把x,y与对应的值替换掉,可得:

                   x1=xcosB-ysinB,

                   y1=xsinB+ycosB.

           只要把每个顶点都旋转,就可以得到最终的图形。

           c++代码:

int Rotate_poly(POLYGON2D_PTR  poly,int ang){
	
	for(int curr_vert=0;curr_vert<poly->num_verts ;curr_vert++){
	float xr=(float)poly->vlist [curr_vert].x*cos_look[ang]-(float)poly->vlist[curr_vert].y*sin_look[ang];
	float yr=(float)poly->vlist [curr_vert].x*sin_look[ang]+(float)poly->vlist[curr_vert].y*cos_look[ang];
	poly->vlist [curr_vert].x =xr;
	poly->vlist [curr_vert].y =yr;
	}

return 1;


}
           其中,poly是多边形,vlist指向顶点,num_verts是多边形的边数。

                        


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

图像旋转以及C代码实现

图像旋转就是将图像按一定角度旋转,依据当前点坐标计算出来的旋转后的坐标往不是整数,因此需要进行插值。常用的插值方法有最近邻插值法、线性插值法和样条插值法(这个我也不懂)。最近邻插值速度快,效果差;双向...
  • einsdrw
  • einsdrw
  • 2015年02月05日 11:27
  • 4153

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

利用C的BMP图像的读取、保存及旋转的实现

// "bmp.h" #ifndef BMP_H_ #define BMP_H_ typedef unsigned char BYTE; //1...

【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现

要识别图像中的字符,首先要会处理图像,把图像的信息读出来。这就必须先了解图像的结构,存储方式。清华大学出版的一本《数字图像处理编程入门》给了我不少帮助。第一章的Windows位图和调色板让我对bmp图...

【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现

通过我这些天用C++读写bmp图像的经历,摸索再摸索,终于对bmp文件的结构、操作有了一定的了解,下面就大概介绍bmp图片纯C++的读取、旋转和保存的实现过程。 要用C++读取bmp图片文件,首先要...

图像编程学习笔记3——图像旋转

以下文字内容copy于>,code为自己实现,是win32控制台程序。 旋转(rotation)有一个绕着什么转的问题,通常的做法是以图象的中心为圆心旋转,举个例子,图2.7旋转30度(顺时针方...
  • Sun1956
  • Sun1956
  • 2013年03月10日 18:40
  • 4173

计算机图形学(四)_几何变换_1_基本的二维几何变换(二)_旋转

类似于平移,旋转是一种不变形地移动对象的刚体变换,对象上的所有点旋转相同的角度。线段的旋转可以通过将旋转方程5用于每个线段端点,并重新绘制新端点间的线段而得到。多边形的旋转则是将每个顶点旋转指定的旋转...

计算机图形学之二维平移旋转缩放代码

以下均为MFC工程代码
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何编程实现二维图形的旋转
举报原因:
原因补充:

(最多只允许输入30个字)