把每个顶点绕原点旋转,实现图形的旋转。这个问题就等价于,已知原坐标(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是多边形的边数。