2

我有以下代码似乎将矩阵向左旋转 90 度......但我所追求的是向右而不是向左旋转:D 尝试修改它但继续搞砸......

    public static int[,] RotateMatrix(int[,] matrix, int n)
    {
        int[,] ret = new int[n, n];

        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                ret[i, j] = matrix[n - j - 1, i];
            }
        }

        return ret;
    }

如何正确旋转它?

4

1 回答 1

4

好吧,显示的片段实际上是顺时针旋转的(即向右)......但如果你想朝另一个方向走,只需交换坐标:

ret[i, j] = matrix[j, n - i - 1];

如果您想一想,这实际上很容易。假设您有这个 4x4 矩阵:

===========================>
| 0,0 | 0,1 | 0,2 | 0,3 | J
| 1,0 | 1,1 | 1,2 | 1,3 |
| 2,0 | 2,1 | 2,2 | 2,3 |
| 3,0 | 3,1 | 3,2 | 3,3 |
=========================
| I
V

现在,不是旋转矩阵,而是围绕它旋转轴:

<===========================
 I | 0,0 | 0,1 | 0,2 | 0,3 |
   | 1,0 | 1,1 | 1,2 | 1,3 |
   | 2,0 | 2,1 | 2,2 | 2,3 |
   | 3,0 | 3,1 | 3,2 | 3,3 |
   =========================
                         J |
                           V

走着瞧吧?垂直的保持不变,它只是改变了它的名字(从 I 到 J)。而横的不仅改名了,还去了另一边:这正是n - j - 1公式所表达的。)

完全相同的思维技巧将帮助您了解逆时针旋转矩阵的公式。)

于 2012-11-20T00:51:07.407 回答