天天看点

如何编程实现二维图形的旋转

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

继续阅读