java - 旋转二维数组中的 block

标签 java rotation coordinate-systems

我正在制作一个类似于著名游戏俄罗斯方 block 的程序,在旋转方 block 时遇到了一些问题。

我知道您可以使用“x = -y”和“y = x”在坐标系中旋转图形,但问题是因为我使用整数数组来表示 block ,所以事情变得如此困难得多。

我的数组看起来像:

int[][] space = new int[20][10];

如果坐标包含 block ,则值为 1,否则为 0。

那么如何在该空间中旋转一个 block 而不会遇到负数的麻烦?

最佳答案

这是一个示例片段(使用 0 和 1 重用 int[][],这也可以使用 boolean 数组来完成):

private static final int[][] piece = new int[][] {
        { 0, 1, 0, },
        { 1, 1, 1, },
};

您可以这样做旋转一 block :

private static int[][] rotate( final int[][] piece ) {
    final int[][] res = new int[piece[0].length][piece.length];
    for (int x = 0; x < piece.length; x++) {
        for (int y = 0; y < piece[0].length; y++) {
            res[(res.length-1)-y][x] = piece[x][y];
        }
    }
    return res;
}

起始部分:

010
111

这是旋转( block ):

01
11
01

这是旋转(旋转(片)):

111
010

这是旋转(旋转(旋转(片))):

10
11
10

关于java - 旋转二维数组中的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9405058/

相关文章:

java - 为什么我们不应该在用户消息中提供用户提供的数据?可能存在任何威胁/攻击吗?

java - 创建不可变对象(immutable对象),在没有 new 的情况下实例化

javascript - 在平铺中重复图像,并使其旋转

javascript - Canvas如何旋转图像并重绘而不旋转整个上下文

math - 坐标系手性如何与旋转方向和顶点排序相关?

python /Matplotlib : convert Axis ⇔ Data coordinates systems

java - Gradle 在构建的 jar 中复制依赖项

java - AsyncAppender 在写入之前不会等待缓冲区已满

java - 四元数平滑旋转