二维世界中的旋转

转载 2006年06月12日 18:53:00

作者:胡颖卓


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

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);


相关文章推荐

世界坐标变换要先缩放、后旋转、再平移的原因

一个三维场景中的各个模型一般需要各自建模,再通过坐标变换放到一个统一的世界空间的指定位置上。 这个过程在 3D 图形学中称作“世界变换” 。 世界变换有三种,平移、旋转和缩放 (实际还有不常用的扭曲和...

绕世界坐标轴和局部坐标轴旋转

  • 2012年05月19日 11:28
  • 2.21MB
  • 下载

世界坐标变换要先缩放、后旋转、再平移的原因

一个三维场景中的各个模型一般需要各自建模,再通过坐标变换放到一个统一的世界空间的指定位置上。 这个过程在 3D 图形学中称作“世界变换” 。 世界变换有三种,平移、旋转和缩放 (实际还有不常用的扭曲和...

二维矩阵旋转90 demo

  • 2017年08月21日 09:41
  • 1KB
  • 下载

LabVIEW二维图片旋转

  • 2015年08月29日 09:17
  • 27KB
  • 下载

世界的本质是旋转(1)复平面与欧拉公式

最近闲来无事,翻看起旧课本《信号与系统》,不经意间对一些基础问题有了新的理解角度。在上学的时候,我搞不清楚,这傅里叶变换是毛?明明一个时域波形,非要搞出个频率出来,虽然很好用,但是看不见摸不着的,实在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二维世界中的旋转
举报原因:
原因补充:

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