我知道将矩阵旋转90度CW的算法:
for (int i=0; i<N/2; ++i)
for (int j=0; j<(N+1)/2; ++j)
{
int c = A[i][j];
A[i][j] = A[N-j-1][i];
A[N-j-1][i] = A[N-i-1][N-j-1];
A[N-i-1][N-j-1] = A[j][N-i-1];
A[j][N-i-1] = c;
}
我是否需要(我可以吗?)修改该算法,或者我可以n
次将{x}}度旋转矩阵(其中90*n
属于 Z (整数))?
答案 0 :(得分:1)
2x旋转是一个更快的翻转。 3x旋转是反向旋转,这更快。 4倍旋转本身也是最快的。所以你可以使用模数运算。
设f为函数数组。
if(n>=0)
f[n%4]();
else
f[4-(-n)%4]();
其中
f[0]=itself();
f[1]=rotate_cw();
f[2]=flip();
f[3]=rotate_ccw();