关于矩阵旋转坐标变换的一道题,想过一遍以后在遇到此类题就好上手了,还是有很强的规律的。
代码:
/****************************************************
* author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <string.h>
using namespace std;
#define eps 1e-8
typedef long long LL;
int n, m, x, y, z, p;
int t;
void out(int a,int b)
{
switch(t)
{
case 1:
{
cout<<b<<' '<<n+1-a<<'\n';
break;
}
case 2:
{
cout<<n+1-a<<' '<<m+1-b<<'\n';break;
}
case 3:
{
cout<<m+1-b<<' '<<a<<'\n';
break;
}
case 0:
{
cout<<a<<' '<<b<<'\n';break;
}
case 4:
{
b=m+1-b;
cout<<a<<' '<<b<<'\n';break;
}
case 5:
{
b=m+1-b;
cout<<m+1-b<<' '<<a<<'\n';break;
}
case 6:
{b=m+1-b;
cout<<n+1-a<<' '<<m+1-b<<'\n';break;
}
case 7:
{
b=m+1-b;
cout<<b<<' '<<n+1-a<<'\n';break;
}
}
}
int main()
{
//freopen ("in.txt" , "r" , stdin);
scanf("%d%d%d%d%d%d",&n, &m, &x, &y, &z, &p);
x%=4;y%=2;z%=4;
if(y)
t=4+(x+z)%4;
else
t=(x-z+4)%4;//cout<<t<<endl;
for(int i=0;i<p;i++)
{
int a,b;
scanf("%d%d",&a,&b);
out(a,b);
}
return 0;
}