顺时针旋转阵列

Jer*_*ler 3 c# arrays math

让我们从一个简单的16 x 16数组开始.
如何以90度顺时针顺序将'SomeValue'插入数组中.

int[] image = new int[16 * 16];

for (int x = 0; x < 16; x++)
{
    for (int y = 0; y < 16; y++)
    {
        int someValue = x * y;

        // This is the line I think is wrong
        image[x + (y * 16)] = someValue; 
    }
}
Run Code Online (Sandbox Code Playgroud)

结果应该像下面的旋转数组.

正常顺序:
0,1,2,
3,4,5,
6,7,8,

顺时针旋转:
6,3,0,
7,4,1,
8,5,2,

dtb*_*dtb 6

你在找这样的东西吗?

0 0 0 1 1 1 2 2 2   x
0 1 2 0 1 2 0 1 2   y
= = = = = = = = =
6 3 0 7 4 1 8 5 2   m*(m-1-y)+x
Run Code Online (Sandbox Code Playgroud)

对于m = 3.


const int m = 16;
int[] image = new int[m * m];

for (int x = 0; x < m; x++)
{
    for (int y = 0; y < m; y++)
    {
        int someValue = x * y;

        image[m*(m-1-y)+x] = someValue; 
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,在锁定此代码时无法停止微笑:) (2认同)