2010-11-04 218 views
3

让我们开始了与整数的简单的16×16阵列。
如何将'SomeValue'以90度顺时针顺序插入到数组中。旋转阵列顺时针

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; 
    } 
} 

结果应该像下面的旋转阵列一样。

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

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

+1

您的代码无法编译,'z'不宣。你还应该通过使用像int [,] image = new int [16,16];' – 2010-11-04 21:51:17

+0

什么是'z''这样的二维数组来简化你的生活?你想旋转矩阵或插入值?这是两回事。 – 2010-11-04 21:51:23

+0

Woops,改变的Z为Y,呵呵我的错;) – 2010-11-04 21:53:23

回答

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 

米= 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; 
    } 
} 
+0

是的很棒! :D:D:D – 2010-11-04 22:13:52

+2

顺便说一句,只是不能停止微笑时锁定在此代码:) – 2010-11-04 22:16:14

+1

那么矩形阵列呢?如果不是[16 * 16],我们需要旋转一个[5 * 2]数组? – lvictorino 2014-02-25 09:37:25

2

关注@Albin Sunnanbos建议并使用二维阵列。然后看看this related question

+0

你知道如何以逆时针方向旋转吗? – 2010-11-04 22:03:39

+0

我的对称感告诉我用'[3-j,i]'代替'[j,3-i]'。在你的情况下,它是15而不是3. – Dialecticus 2010-11-04 22:16:03

+0

哈哈,所以它是如此简单:p – 2010-11-04 22:29:50

1

如果你想生成旋转阵列,你可以做这样的

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

int current = 0; 
for (int x = 15; x >= 0; x--) 
{ 
    for (int y = 0; y < 16; y++) 
    { 
     image[x, y] = current; 
     current++; 
    } 
} 

// Output 

for (int y = 0; y < 16; y++) 
{ 
    for (int x = 0; x < 16; x++) 
    { 
     Console.Write(image[x,y] + ", "); 
    } 
    Console.WriteLine(); 
} 
+0

那么它输出为二维数组,但我可以说很容易地转换:d – 2010-11-04 22:11:07

+1

二维数组是不是一个错误,这是一个特点: - )(它提高了代码的可读性和意图) – 2010-11-04 22:13:29

+0

你是对的!二维数组的实际使它更容易:D – 2010-11-04 22:24:08