关键词:
关键词:魔方还原;魔方二维平面展开
1.魔方基础知识
1.1魔方各面表示
根据魔方各面所处位置将三阶魔方六个面分别用六个大写英文字母进行表示,相应面上的颜色也分别用这六个大写英文字母进行表示。
顶面Up | 底面Down | 前面Front | 背面Back | 左面Left | 右面Right |
U | D | F | B | L | R |
白色 | 黄色 | 绿色 | 蓝色 | 橙色 | 红色 |
1.2 组成魔方的小方块
一个三阶魔方可分为三层,顶层、底层和中间层。有六个面,每个面9个色块,一共54个色块。总共由26个小方块组成,根据魔方每个小方块所处的位置可分为三种小方块,分别是中心块、棱块和角块。中心块有6个,每个中心块上只有一种颜色,只需用一个大写字母表示,魔方在旋转过程中中心块的相对位置都是不会变的。棱块有12个,棱块处于每条边的中间位置,每个棱块有两种颜色,用两个大写字母表示。角块有8个,每个角块3种颜色,用三个大写字母表示。
1.3 魔方状态字符串
可以用一串大写英文字母表示一个三阶魔方的状态,一个已经还原好的魔方可以用这样一串字符表示:UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR。
这种表示法是由一个叫Mike Reid的魔方爱好者首先使用的,它表示一个已经被解好的魔方。因为六个不同颜色中心块在任何旋转过程中相对位置都是不会变的,所以没有单个字符。这串标准字符中12个双字符表示魔方的12个棱块,每个棱块两种颜色。8个三字符表示魔方8个角块,每个角块三种颜色。对照这个标准字符串,一个打乱的魔方的两个中心块所夹的棱块可以表示出来,三个中心块所夹的角块可以表示出来。
还不理解的朋友看这篇博客:解魔方的机器人攻略18 – 魔方快速算法 at 做做AI,造造人 - 动力老男孩的博客
1.4 拧魔方动作表示/解魔方步骤字符串
拧魔方的动作用各个魔方面代表的字符加顺时针旋转的次数表示,如R1表示R面即右面顺时针旋转一次,R2表示R面顺时针旋转两次,R3代表R面顺时针旋转三次,也即逆时针旋转1次。
解魔方步骤字符串:U1D3F2L3B3F3U1L1D1L2U1F2R3U3B2L2U3F2U1F2L2F2D2L2B2D2L2U2F2U2
2.解魔方算法
本人使用的是Thislethwaite法又简称TM法。网上找了一个基于TM法的C++编写的解魔方程序,输入的是魔方状态字符串,输出的是解魔方步骤字符串。
想获得C++编写的解魔方程序看我的这篇文章:解魔方算法/Thislethwaite解魔方算法/降群法_嗑药的皮皮虾的博客-CSDN博客_魔方降群法
TM法最初是计算机用来解魔方所用的方法。过程中只是在调整块与块之间的全局关系,魔方始终是乱的,没有一个面被还原,只在最后一步,寥寥几下转动,整个魔方被复原。普通解法是通过逐块逐层还原来减少下一步剩余块的状态数,最后所有块还原。TM法则与普通解法有本质的不同。魔方的任何一种状态与魔方群的一个群元素是一一对应的。TM法的思想就是逐步降解魔方所处的群到更小的子群,最后到单位子群,也即还原状态。在还原的每一步实体魔方看起来还是乱的,但实际上魔方的状态数是随所处的群的减小而规则的减小的。
3.魔方二维动态还原MATLAB程序思路
将魔方二维平面展开,U面中心块设为坐标原点(0,0),使用库函数rectangle画魔方色块。
rectangle('position',[x y w h],'edgecolor','k','facecolor',[r g b]);%画方框
使用了很多结构体类型的数据,layer_xy即为结构体类型,layer_xy.('U')存储了U面所在层的20个色块的坐标(不计中心块),即转动U面会移动的色块。坐标分5行,每行4个坐标(x,y)。这样分类的原因与魔方旋转过程中色块的移动有关。有4个色块移动时会到对方位置上去。看图中相同颜色色块所示。
layer_xy.('U')=[0 1 1 0 0 -1 -1 0;-1 1 1 1 1 -1 -1 -1;0 2 2 0 0 -2 -2 0;1 2 2 -1 -1 -2 -2 1;-1 2 2 1 1 -2 -2 -1];
很重要的一个变量就是cube_54xy_c.([x,y]),cube_54xy_c为结构体变量,字段为坐标(x,y),值为颜色RGB值[r g b],即cube_54xy_c.([x,y])=[r g b]。这个结构体变量记录了对应坐标色块的颜色。
4.MATLAB程序
编写了4个.m文件,cube_init.m/cube_rotate.m/cube_show.m这三个为函数文件,cube_main.m为脚步文件,cube_main.m脚步文件调用这三个函数。
使用时需要修改的地方有cube_init()函数中的未还原魔方的魔方状态字符串error_cube字符串数组和cube_main.m中的解魔方步骤step字符数组。修改完成点击运行即可。命令行窗口会显示‘一共多少步’,按任意键就开始二维仿真还原魔方的过程。
4.1 cube_init函数
cube_init()函数无输入参数,函数的作用是将未还原的魔方的魔方状态字符串所包括的信息提取到cube_54xy_c结构体变量中,并画出一个未还原的魔方的二维平面展开图。
4.2 cube_rotate函数
cube_rotate(rotate_face,times)函数,两个输入参数一个是需要旋转的魔方面,另一个是旋转次数。函数作用是当执行一个转动魔方的动作,改变需要移动色块的颜色,并更新cube_54xy_c结构体变量。
4.3 cube_show函数
cube_show()函数无输入参数,函数作用是显示cube_54xy_c结构体变量中对应坐标色块的颜色,相当于更新了魔方二维平面展开图。
4.4 cube_main主程序
cube_main就是一个脚步文件,它调用了cube_init.m/cube_rotate.m/cube_show.m这三个函数,运行这个脚步文件就开始魔方二维动态还原。
4.5 结果
只提取了魔方还原过程中的4副图,如下图所示。
2019 a版本MATLAB程序:matlab_cube4.rar_Matlab绘制三阶魔方-其它文档类资源-CSDN下载 创作不易还请支持一下。
QQ联系2530175129
另一种更简便的方法:
基于matlabgui的魔方三维动态还原仿真程序(代码片段)
软件MATLABR2019A1、程序介绍使用MATLABGUI功能设计制作一个魔方三维动态还原仿真程序,点击魔方旋转按钮U\\D\\F\\B\\L\\R旋转方面相应面,逆\\顺时针按钮切换旋转方向,文字编辑框输入旋转步骤如U1B2L3再点击开始还原按... 查看详情
光线投射和二维阵列在 Unity 中的魔方无法按预期工作
】光线投射和二维阵列在Unity中的魔方无法按预期工作【英文标题】:Raycastingand2darraysnotworkingasexpectedwithRubik\'sCubeinUnity【发布时间】:2021-06-1420:15:11【问题描述】:我希望这是一个很好的问题,但我目前正在Unity中研究魔方。我... 查看详情
matlab画三维动态魔方/旋转魔方/旋转立方体(代码片段)
以下是我的思路先了解几个重要的函数patch()函数原理:点按顺序连成封闭多边形。使用:point_sequence=[1,2,3,4];%点连接的顺序square_xyz=[3,1,3;1,1,3;1,-1,3;3,-1,3];%三维坐标4x3矩阵patch('Faces',point_sequence,'Vertices 查看详情
利用pygame制作魔方的平面展示
为了更方便地验证我们魔方变换代码的准确性,特地利用pyggame设置一个简单的平面展示,初步展示我们的魔方操作利用pygame模块的函数制作界面screen=pygame.display.set_mode((400,480)) //创建一个宽度400、高度480的窗口pygame.draw.rect(sc... 查看详情
魔方还原
三阶魔方还原公式:1.黄心白十字2.白心白十字3.下层对齐上勾下回4.中间层对齐竖柱对齐,远离,上勾下回5.黄色十字远离,上勾下回,回去6.顶面黄色下回上回下回回上7.对好角块颜色黄色对着自己,上回上,下180,下勾上,下180... 查看详情
解魔方神器开源:摄像头看一眼,就能还原全步骤
梦晨发自凹非寺量子位报道|公众号QbitAI魔方解不开了怎么办,让程序来帮你。只需用摄像头把魔方的六个面扫描一遍就能直接给出还原步骤。即使你的魔方不是标准配色或房间的照明情况特殊也可以通过颜色校准模式来识别... 查看详情
matlab画三维动态魔方/旋转魔方/旋转立方体(代码片段)
以下是我的思路先了解几个重要的函数patch()函数原理:点按顺序连成封闭多边形。使用:point_sequence=[1,2,3,4];%点连接的顺序square_xyz=[3,1,3;1,1,3;1,-1,3;3,-1,3];%三维坐标4x3矩阵patch('Faces',point_sequence,'Vertices',squ... 查看详情
三阶魔方还原公式
1.第二层棱块归位: 2.顶层十字3.顶层棱中间块归位这一步的目的是使顶层的4个棱中间块全部归位。转动顶层(U),若可以使一个棱中间块归位(如下图左,这里以[红-黄]块为例),而其他3个都不能归位,则将[红-黄]所在这一面(... 查看详情
matlab仿真二维光子晶体最简程序
本程序为初学者使用,只考虑MT方向下面的程序为matlab代码只考虑MT方向%ThisisasimpledemoforPhotonicCrystalssimulation%ThisdemoisforTEwaveonly,soonlyhwaveisconsidered.%forTMdirectiononly,10pointsisconsidered.%------------------------ 查看详情
解魔方算法/thislethwaite解魔方算法/降群法
0.前言主流的魔方解法,从入门的层先法,到进阶的CFOP、桥式乃至盲拧,都是从部分到整体的思路,逐块逐层还原魔方。但是Thislethwaite法不同,Thislethwaite法从整体出发,不断降低魔方的混乱程度,最... 查看详情
将图像从圆柱体内部投影到二维平面 [Matlab]
】将图像从圆柱体内部投影到二维平面[Matlab]【英文标题】:Projectionofaimagefrominsideacylindertoaplane2D[Matlab]【发布时间】:2015-10-1019:53:56【问题描述】:我用圆柱体内的相机拍摄图像。我想将该图像转换为平面2d。圆柱体内部的图像... 查看详情
matlab——图形绘制——二维平面图形(代码片段)
二维平面图形holdon ————在已画好的图形上添加新的图形 plot是绘制一维曲线的基本函数,但在使用此函数之前,我们需先定义曲线上每一点的x及y座标。下例可画出一条正弦曲线:>>x=0:0.001:10;%0到10的1... 查看详情
ar极限魔方——新技术下的传统玩具
说到魔方想必大家都不会陌生,大家也都知道它的难度,本人也是高中时代才依靠公式的帮助完成了第一次正式还原,为啥说是正式呢?毕竟小时候曾经把魔方拆开来,然后拼装还原650)this.width=650;"style="margin:10pxauto0px;padding:0px;bo... 查看详情
二维码图像矫正增强基于matlab的二维码图像矫正增强处理仿真(代码片段)
1.软件版本matlab2013b2.算法流程概述通过形态学处理获得二维码部分的图像区域及边界;采用凸包算法来计算边界上的点集;然后根据点集来寻找二维码的四个顶点,然后透视变换矫正,二维码分割得到每个格子中... 查看详情
魔方的征途-魔方如何选择?
...个"我们认为一定能复原"但实际"无法复原"的魔方,看着大神们"信手拈来"的复原过程,除了惊呼"这个不可能"外,好像没其他能做的了,有些凄凉。。。最近孩子学校用到了魔方道具,... 查看详情
读书笔记(第五周)之魔方的创新
读书笔记(第五周)读《构建之法》之魔方的创新在不苛求比喻精准的前提下,“魔方的创新”这篇小故事写得确实有意思,也很能反映创新过程中一系列的问题。首先,通过几个大致的故事节点来总结一下情节的发展,再来逐... 查看详情
机械仿真基于matlab二维钢桁架分析与设计含matlab源码2103期
...式1:完整代码已上传我的资源:【机械仿真】基于matlab二维钢桁架分析与设计【含Matlab源码2103期】点击上面蓝色字体,直接付费下载,即可。获取代码方式2:付费专栏物理应用(Matlab)备注:点击上面蓝色字体付费专栏物理应... 查看详情
机械仿真基于matlab二维钢桁架分析与设计含matlab源码2103期
...式1:完整代码已上传我的资源:【机械仿真】基于matlab二维钢桁架分析与设计【含Matlab源码2103期】点击上面蓝色字体,直接付费下载,即可。获取代码方式2:付费专栏物理应用(Matlab)备注:点击上面蓝色字体付费专栏物理应... 查看详情