首先,在解析几何中我们可以找到以下公式:
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++库中,sin和cos所要求的参数为弧度,而并非角度,所以我们需要一个转换。
弧度=角度*圆周率/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); nx=rx+((x-rx)*ac-(y-ry)*as); |