我正在用 Java 构建俄罗斯方块,并尝试使用线性代数来旋转由 4 个瓷砖组成的一块。
我的朋友正在解释这样做的方法是:
他说:
“为了澄清,你确实需要旋转每个点——也就是说,你需要为一块中的每个瓷砖旋转一个点。但不是为一块中的每个瓷砖旋转四个角。原点就像你把铅笔穿过一个一张纸,把铅笔转了一圈……铅笔所在的地方就是原点。”
“所以,如果你的棋盘上有一个 T 牌,牌在 (7,9) (8,9) (9,9), (8,10),它的原点在 (8,9)..”
所以我用坐标 (1, 3) (1, 2) (1, 1) (2, 2)... 原点 (1, 2)
然后他说:
“您将 Tiles 转换为相对于原点。也就是说,您将原点视为此旋转的新 (0, 0)。这就像从每个坐标中减去原点一样简单,得到 (7-8, 9-9), (8-8, 9-9), (9-8, 9-9), (8-8, 10-9) 或 (-1, 0) (0, 0) (1, 0) ) (0, 1)"
从每个坐标中减去原点 (1, 2)
(1-1, 3-2) (1-1, 2-2) (1-1, 1-2) (2-1, 2-2) =
(0, 1) (0, 0) (0, -1) (1, 0)
然后他说:
“现在使用旋转矩阵乘法旋转这四个坐标,就像我们一直在谈论的那样。”
最后他说:
“然后将原点坐标添加回每个结果坐标,现在你有了四个旋转的 Tile 坐标。”
从上面的矩阵中,我有 (0, -1) (0, 0) (0, 1) (-1, 0)... 所以我像他说的那样将这些添加到原点坐标 (1-1, 3+0) (1+0, 2+0) (1+0, 1+1) (2-1, 2+0) =
旋转坐标: (0, 3) (1, 2) (1, 2) (1, 2)
但是,看看我旋转的形状......这是完全错误的:
有什么想法为什么?
谢谢!