向右旋转2d数组

时间:2012-11-20 00:35:31

标签: arrays c#-4.0

我有以下代码,似乎将矩阵向左旋转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;
    }

如何正确旋转?

1 个答案:

答案 0 :(得分: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公式表达的内容。 )

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