我有一个游戏板网格,该网格高20行,宽10列,其原点(0,0)位于左上角。我在玩四联体,由四个方块组成。我有每个块相对于左上角原点的x,y位置。我还具有枢轴的位置,即我希望围绕其旋转的点,该点相对于左上角的原点。
每个方块在游戏板正方形中具有整数位置,因此枢轴在方块之间具有小数位置,例如(10.5,10.5)
我的问题是:我可以使用哪个公式围绕枢轴旋转每个块?
我已经看过现有的类似问题和答案,但是找不到我可以工作的答案。
帮助将不胜感激。
我有一个游戏板网格,该网格高20行,宽10列,其原点(0,0)位于左上角。我在玩四联体,由四个方块组成。我有每个块相对于左上角原点的x,y位置。我还具有枢轴的位置,即我希望围绕其旋转的点,该点相对于左上角的原点。
每个方块在游戏板正方形中具有整数位置,因此枢轴在方块之间具有小数位置,例如(10.5,10.5)
我的问题是:我可以使用哪个公式围绕枢轴旋转每个块?
我已经看过现有的类似问题和答案,但是找不到我可以工作的答案。
帮助将不胜感激。
Answers:
标准的俄罗斯方块旋转逻辑称为超级旋转系统。SRS适合于高水平的俄罗斯方块游戏,可以在壁球踢和T型旋转上进行多种变化。
除非被阻止,否则所有四聚体都存在于边界正方形内,并围绕该正方形的中心旋转。宽度3(J,L,S,T,Z)的四聚体放置在边界正方形的顶部两行中,并且(对于J,L和T)平坦的一面朝下。我被放在中间的第一行。
所有tetrominoes会在游戏场的顶部按2条通常隐藏的行生成。它们位于这些行的中心,向左舍入。一旦Tetromino着陆,它就不会锁定,直到锁定延迟到期为止。锁定延迟行为被Tetris Company称为Infinity,每当移动或旋转Tetromino时,就会重置锁定延迟。硬掉线通常映射为向上,没有锁定延迟。
绕原点旋转的一般公式是
xNew = x * cos(a) - y * sin(a)
yNew = x * sin(a) + y * cos(a)
对于90度,它变为
xNew = -y
yNew = x
因此,首先获得相对于枢轴点的砖中心坐标:
x = xBrickCenter - xPivot
y = yBrickCenter - yPivot
然后围绕枢轴点旋转它们:
x1 = -y = yPivot - yBrickCenter
y1 = x = xBrickCenter - xPivot
然后将枢轴坐标添加到旋转点:
newXBrickCenter = xPivot + x1 = xPivot + yPivot - yBrickCenter
newYBrickCenter = yPivot + y1 = yPivot - xPivot + xBrickCenter
但是,如果您需要旋转90度的倍数,则可以为每个方向存储四组积木位置,并在它们之间切换而不是实际旋转。
您可以围绕该枢轴块旋转所有方形环(从a到h旋转2个位置,从A到P旋转4个位置,依此类推):
ABCDE MNOPA PabcF LghaB 哦,dG-> Kf.bC NgfeH JedcD MLKJI IHGFE
遵循数学中的标准2D旋转公式应该可以解决问题。