我有以下代码,似乎将矩阵向左旋转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;
}
如何正确旋转?
答案 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
公式表达的内容。 )
完全相同的头脑技巧将帮助您了解逆时针旋转矩阵的公式。 )