Повернуть массив по часовой стрелке - PullRequest
3 голосов
/ 05 ноября 2010

Давайте начнем с простого массива 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,

Ответы [ 3 ]

6 голосов
/ 05 ноября 2010

Вы ищете что-то подобное?

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; 
    }
}
2 голосов
/ 05 ноября 2010

Следуйте предложению @Albin Sunnanbos и используйте двумерный массив.Тогда взгляните на этот связанный вопрос .

1 голос
/ 05 ноября 2010

Если вы хотите сгенерировать повернутый массив, вы можете сделать это

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...