关闭

二维世界中的旋转

标签: float360
911人阅读 评论(0) 收藏 举报
分类:

作者:胡颖卓


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

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:46754次
    • 积分:803
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:7篇
    • 译文:0篇
    • 评论:18条
    最新评论
    游戏开发
    游戏引擎