本文针对用js编写俄罗斯方块的时候,方块的旋转变形算法,以逆时针旋转为例,下图为旋转的说明图

第一次用visio画图,画的很不好,坐标(x,y)绕(x0,y0)逆时针旋转90度后的坐标为(x0+y0-y,y0-x0+x)。如图。假设(x0,y0)点为原点(0,0),(x,y)绕原点旋转90度后的坐标为(-y,x),当绕(x0,y0)旋转时,可以先把(x.y)坐标平移到(x-x0,y-y0)点,等于是基于原点旋转,旋转后坐标为(-(y-y0),(x-x0)),然后再平移回来,即所得坐标(x0+y0-y,y0-x0+x)。

下面是我工程的旋转部分的代码,完整的俄罗斯方块代码可以去我的博客代码片查看https://code.csdn.net/snippets/1675026

//定义旋转
var rotate = function(){var canRotate = true;for(var i = 0;i<currentFall.length;i++){var preX = currentFall[i].x;var preY = currentFall[i].y;if(i!=2){/*var afterRotateX = currentFall[2].x+preY-currentFall[2].y;//旋转后的横坐标var afterRotateY = currentFall[2].y+currentFall[2].x-preX;//旋转后的竖坐标*/var afterRotateX = currentFall[2].x-preY+currentFall[2].y;//旋转后的横坐标var afterRotateY = currentFall[2].y-currentFall[2].x+preX;//旋转后的竖坐标if(tetris_status[afterRotateY][afterRotateX-1]!=0){canRotate = false;break;}if(afterRotateX<0||tetris_status[afterRotateY-1][afterRotateX]!=0){moveRight();/*afterRotateX = currentFall[2].x+preY-currentFall[2].y;afterRotateY = currentFall[2].y+currentFall[2].x-preX;*/afterRotateX = currentFall[2].x-preY+currentFall[2].y;//旋转后的横坐标afterRotateY = currentFall[2].y-currentFall[2].x+preX;break;if(afterRotateX<0||tetris_status[afterRotateY-1][afterRotateX]!=0){moveRight();break;}//如果旋转后的图形超过了右边边界if(afterRotateX>=TETRIS_COLS-1||tetris_status[afterRotateY][afterRotateX+1]!=0){moveLeft();afterRotateX = currentFall[2].x+preY-currentFall[2].y;afterRotateY = currentFall[2].y+currentFall[2].x-preX;break;}if(afterRotateX>=TETRIS_COLS-1||tetris_status[afterRotateY][afterRotateX+1]!=0){moveLeft();break;}}}if(canRotate){for(var i = 0;i<currentFall.length;i++){var cur = currentFall[i];tetris_ctx.fillStyle = "white";tetris_ctx.fillRect(cur.x*CELL_SIZE+1,cur.y*CELL_SIZE+1,CELL_SIZE-2,CELL_SIZE-2);}for(var i = 0; i<currentFall.length;i++){var preX = currentFall[i].x;var preY = currentFall[i].y;if(i!=2){currentFall[i].x = currentFall[2].x+preY-currentFall[2].y;currentFall[i].y = currentFall[2].y-preX+currentFall[2].x;}}for(var i = 0; i<currentFall.length;i++){var cur = currentFall[i];tetris_ctx.fillStyle = "red";tetris_ctx.fillRect(cur.x*CELL_SIZE+1,cur.y*CELL_SIZE+1,CELL_SIZE-2,CELL_SIZE-2);}}}
}

俄罗斯方块中方块的旋转变形相关推荐

  1. UNITY 开发日记/教程 俄罗斯方块 (五) 方块平移和旋转

    接上文. 已经实现了方块下落之后,可以意识到,平移变得非常简单.因为我们已经实现了边界检查的函数,只要把移动目标坐标放进去判断就可以了. 在UPDATE中增加如下代码 if (Input.GetKey ...

  2. ai如何旋转画布_ai中怎么使用旋转工具制作旋转对称图?ai中使用旋转工具制作旋转对称图的方法...

    ai是一款可以在线编辑的位图软件,你知道ai中怎么使用旋转工具制作旋转对称图的吗?接下来我们一起往下看看ai中使用旋转工具制作旋转对称图的方法吧. 方法步骤 1.我们需要先打开ai软件,按ctrl+N ...

  3. cad立体图怎么旋转看图_cad布局中图形怎么旋转

    在布局里面经常会用到很多命令.那么大家知道cad布局中图形怎么旋转吗?下面是学习啦小编整理的cad布局中图形怎么旋转的方法,希望能给大家解答. cad布局中图形旋转的方法一 小编在模型里面打开一张ca ...

  4. matlab因子载荷矩阵正交旋转,因素分析中的矩阵旋转

    因素分析中的矩阵旋转 因素分析法 因素分析是一种统计技术,目的是从众多的可观测的"变量"中,概括和推论少数"因素".用最少数的"因素"来概括 ...

  5. 怎么实现EDIUS 8中图片的旋转

    刚刚接触EDIUS非线性编辑软件吗?觉得很难找到开破点吗?不要着急,新一篇EDIUS 8入门教程又来了.上一次我们讲了如何使用EDIUS 8让所有的图片素材都变成相同大小的,是不是很简单啊,这次我们再 ...

  6. ECharts-gl中三维图片旋转问题

    ECharts-gl中三维图片旋转问题 一开始用ECharts-gl库进行绘图的时候很多东西不是很熟,下面我稍微讲解下如何对三维图片进行旋转的操作以及代码的附上,有兴趣的读者可以自行测试. 主程序代码 ...

  7. CAD制图软件中面域旋转命令的使用技巧

    在浩辰CAD制图软件中,旋转面域是一个很好用的CAD命令,可以用来建立三维实体模型.接下来以实例来给大家介绍一下面域旋转的CAD命令吧. CAD面域旋转命令的使用技巧: 首先在浩辰CAD软件中将所画图 ...

  8. 如何在 Excel 中对齐或旋转单元格中的文本?

    欢迎观看 Microsoft Excel 教程,小编带大家学习 Microsoft Excel的使用技巧,了解如何在 Excel 中对齐或旋转单元格中的文本. 在 Excel 中,对齐或旋转单元格的文 ...

  9. 在word文档表中插入图片不变形

    在word文档表中插入图片不变形 目录 在word文档表中插入图片不变形 1.点击左上角[全选图标 ]选中表格,鼠标右键点击[表格属性] 2.点击[选项]点击 取消勾选[自动重调尺寸以适应内容],最后 ...

  10. UE4中物体的旋转位移方法总结大全

    一:UE4中物体的旋转 在开始之前我要介绍一些准备知识. 如下图所示: 在空间变换中物体的旋转有三个情况: 分别对应X轴旋转,Y轴旋转,Z轴旋转,对应起来就是roll, pitch, yaw. 以飞机 ...

最新文章

  1. flask 控制台输出到文件
  2. 使用Storm实现WordSum
  3. Struts2和Struts1.x的全面比较
  4. 淘宝网的技术发展史(一)——个人网站时代
  5. 国内git clone报错问题解决办法
  6. Xcode 自定义代码块及代码块迁移
  7. java修饰符super_Java 继承 方法重写 super关键字 访问权限修饰符
  8. dlna 斐讯r1怎么用_斐讯R1智能(蓝牙)音箱固件升级教程
  9. 寒冰作品——零起点学习Linux系列培训视频
  10. box-shadow兼容IE8浏览器写法
  11. 我的日常工作剖析,美好的一天,从每一天开始。
  12. 这个应该是目前最全的Tracking相关的文章了
  13. B站季报图解:营收10.8亿同比增48% 用户增长超预期
  14. 码云gitee 部署公钥匙
  15. Git 学习进展 (补发)
  16. MIUI12可以升级鸿蒙,MIUI12适用机型汇总 MIUI12哪些机型可以升级?
  17. 从SPS帧解析视频分辨率
  18. 利用Python计算两个地理位置之间的中点
  19. 鸿蒙系统浏览器内核,四大浏览器横评出炉:Chromium 内核版 Edge 四项夺冠,优于原生 Chrome...
  20. 植物大战僵尸(8):分析植物的攻击速度

热门文章

  1. s3c6410 开发板Linux系统支持 K9GAG08U0E的方法(第二篇)
  2. 对赌协议的经典案例分析
  3. 3500字专家访谈,探访汽车零部件企业争相迈步数字化背后的故事
  4. 安装软件时提示“系统管理员设置策略禁止此安装”,解决方案
  5. 51单片机非阻塞串口中断收发数据
  6. 任正非的《北国之春》
  7. 【Linux】rm -rf 删除命令
  8. 基于卫星高度计海面高度异常资料获取潮汐调和常数方法及应用matlab代码
  9. 华为od与中软外包哪个更好_真惨!入职中软一个月(外包华为)就离职了~
  10. 北美票房:《触不可及》惊喜夺冠