Повернуть 3D-сетку Lua - PullRequest
       8

Повернуть 3D-сетку Lua

0 голосов
/ 23 июня 2018

Привет!

Мне было интересно, как я собираюсь повернуть трехмерную сетку на 90 градусов или точнее двухмерную сетку по одному слою за раз.

Пример слоя 1:

X O X X X                X X O X X
X X X X X                X X O X O
O O X O O ==90° Right==> X X X X X
X X X X X                X X O X X
X X X X X                X X O X X

Было бы хорошо, если бы это работало в обоих направлениях, поэтому мне не нужно повторять это еще три раза, чтобы повернуть его влево.

1 Ответ

0 голосов
/ 23 июня 2018

Не реструктурируйте ваши данные - это может быть очень дорого, особенно если размер сетки очень большой.Вместо этого используйте другую итерационную логику для обхода сетки.Например:

С данными выше, сохраните их, как показано слева:

rows = {}
rows[1] = {“X”, “O”, “X”, “X”, “X”}
rows[2] = {“X”, “X”, “X”, “X”, “X”}
rows[3] = {“O”, “O”, “X”, “O”, “O”}
rows[4] = {“X”, “X”, “X”, “X”, “X”}
rows[5] = {“X”, “X”, “X”, “X”, “X”}

Метод итерации 1 будет:

for i = 1, #rows do
    for j = 1, #rows[i] do
        — Do something with rows[i][j]
    end
end

Это будет читатьданные, подобные сетке слева: поперек строк, сверху вниз.

Метод итерации 2 будет следующим:

for i = 1, #rows[1] do
    for j = #rows, 1, -1 do
        — Do something with rows[j][i]
    end
end

Это будет считывать данные слева , как если быэто была сетка справа.

Теперь вам нужно переставить данные (например, из-за их записи в файл изображения), а затем использовать вышеупомянутые вложенные циклы для перемещениясетки и записывать значения ячеек с каждой итерацией.

Также: если ваши сетки всегда имеют размер 5x5, то вы можете упростить приведенный выше код.Вы можете жестко запрограммировать циклы для перехода от 1 к 5 вместо использования оператора # length.

...