俄罗斯方块旋转算法研究

最近在阅读俄罗斯方块的算法。提到旋转算法。没有向下看了。自己想一想
我自己的想法如下
矩阵旋转算法

A1 A2 A3 A4

B1 B2 B3 B4

C1 C2 C3 C4

D1 D2 D3 D4
旋转以B2 B3 C2 C3 中间的点为旋转轴。
旋转以后矩阵变为
D1 C1 B1 A1

D2 C2 B2 A2 

D3 C3 B3 A3

D4 C4 B4 A4
1,1数据变成了 1,4

问题:旋转以后方块的位置发生重大移动。

原因。这个方块的重心其实是B2.

那么一根长条的重心在哪里
A1 A2 A3 A4

B1 B2 B3 B4

C1 C2 C3 C4

D1 D2 D3 D4

以矩阵为重心,顺时针旋转的话,长条会直接跑到右侧了。

长条我们希望旋转以后变成

A1 A2 A3 A4

B1 B2 B3 B4

C1 C2 C3 C4

D1 D2 D3 D4

可以得出长条的重心也在B2.这是一次旋转,如果再次顺时针旋转。以B2为重心就会发生问题。没有位置存放D2.

A1 A2 A3 A4

B1 B2  B3 B4

C1 C2 C3 C4

D1 D2 D3 D4

 

A1 A2 A3 A4

B1 B2 B3 B4

C1 C2 C3 C4

D1 D2 D3 D4

结论:

一个节省时间,提高程序效率的而且比较简单的办法就是把所有希望变化以后的矩阵,都写在一个数组里。

即总体数据为三维数据。每一个矩阵的形态也存在其中。而非人为旋转。

俄罗斯方块的旋转特性,尽量不要用算法控制,因为经过几次旋转就会发生位置偏移。如果每次记录偏移量,也是可以的。直接代码太过复杂,而且容易出错。所以建议写死在数组里。然后旋转就是更换数组的一个维度(旋转维度)
首发于http://java-er.com - http://java-er.com/blog/eluosi-xuanzhuan/

posted on 2012-12-06 17:22 月小升 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/yuexiaosheng/archive/2012/12/06/2805467.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值