旋转矩阵90 * n度CW

时间:2017-03-12 13:01:08

标签: algorithm matrix rotation

我知道将矩阵旋转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 (整数))?

1 个答案:

答案 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();