旋转3D网格Lua

嗨!

我在想如何旋转一个3D网格 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° 右转==> 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

如果这个方法可以适应在左右两个方向上旋转就更好了,这样我就不必重复三遍,只需要旋转到左侧即可。

点赞
用户4403144
用户4403144

不要重新构造数据 - 这可能非常昂贵,特别是如果网格大小非常大。相反,使用不同的迭代逻辑遍历网格。例如:

使用上面的数据,将其保留如左侧所示:

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而不是使用#长度运算符。

2018-06-23 13:22:59