自由天空

I Believe I Can Fly

二维世界中的旋转

作者:胡颖卓


  首先,在解析几何中我们可以找到以下公式:

x'=x*cos(ang)-y*sin(ang)
y'=x*sin(ang)+y*cos(ang)

  这个公式是以原点(0,0)为中心,将点(x,y)旋转ang度,旋转后的坐标为(x',y')。不过这只是以原点为中心进行旋转的,如果我们想以任意点为中心旋转呢!公式变形如下:

x'=zx+(x-zx)*cos(ang)-(y-zy)*sin(ang)
y'=zy+(x-zx)*sin(ang)+(y-zy)*cos(ang)

  好,这也就是我们想要的结果了。以(zx,zy)为中心,将点(x,y)旋转ang度,旋转后的坐标为(x',y')

  由于在标准C/C++库中,sincos所要求的参数为弧度,而并非角度,所以我们需要一个转换。

弧度=角度*圆周率/180

  按以上,最后的标准C/C++程序如下:

float x,y;           //原始点坐标
float rx,ry;         //旋转中心点坐标
float nx,ny;         //旋转后的点坐标
float ang;           //旋转角度(0-360)
float as,ac;

……

as=sin(ang*M_PI/180.0);
ac=cos(ang*M_PI/180.0);

nx=rx+((x-rx)*ac-(y-ry)*as);
ny=ry+((x-rx)*as+(y-ry)*ac);


阅读更多
文章标签: float 360
个人分类: 程序源码
上一篇再次发掘数据结构
下一篇高速扇形绘制程序
想对作者说点什么? 我来说一句

MATLAB二维图像旋转函数

2015年02月01日 1KB 下载

没有更多推荐了,返回首页

关闭
关闭