题目地址:
题目大意: 给你一个坐标系,一堆坐标,问顺时针旋转x次,水平镜像对折y次,逆时针旋转z次后,这些坐标现在是多少?
额,就是坐标系下的旋转问题, 要注意 1 比如旋转90度,再进行下一次旋转时 你用来计算新坐标的n和m是会改变的。
2 算一组新数据时 记得还原初始化的n,m
3 这里有水平翻折,那么不能用一次顺时针和一次逆时针抵消掉。
代码:
#include<iostream> #include<cstdio> using namespace std; int main() { int n,m,x,y,z,p; cin>>n>>m>>x>>y>>z>>p; x=x%4; y=y%2; z=z%4; int original_n=n; int original_m=m; int a,b; for(int i=0;i<p;i++) { scanf("%d%d",&a,&b); n=original_n; m=original_m; if(x==1) { int aa=a; a=b; b=n+1-aa; int nn=n; n=m; m=nn; } else if(x==2) { a=n+1-a; b=m+1-b; } else if(x==3) { int aa=a; a=m+1-b; b=aa; int nn=n; n=m; m=nn; } if(y==1) { b=m+1-b; } if(4-z==1) { int aa=a; a=b; b=n+1-aa; int nn=n; n=m; m=nn; } else if(4-z==2) { a=n+1-a; b=m+1-b; } else if(4-z==3) { int aa=a; a=m+1-b; b=aa; int nn=n; n=m; m=nn; } printf("%d %d\n",a,b); } }