二阶魔方复原算法推算-Part1

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

1. 二阶魔方

对于魔方来说,二阶魔方算是比较简单的,共有8个顶角块,上面四个块,下面四个块:可以分为
前面四个角块:左前上,左前下,右前上,右前下
后面四个角块:左后上,左后下,右后上,右后下

魔方的面有六个,可以分为前后左右上下,一般来说可以用几个简写字母代替:
F-Front
B-Back
L-Left
R-Right
U-Up
D-Down

2. 还原过程

还原过程:还原过程一般分为几个步骤,选其中任一种颜色为底部
首先:底部还原,还原后达到要求:底部颜色一致 + 底部块位置排序正常–周边颜色对齐。
例如下面这张图片上,该选定红色底面周边紧挨着的黄色、蓝色都是对齐的、以及遮挡掉的白色、绿色也都是对齐的:
在这里插入图片描述
接着:顶部块位置排序还原,还原后达到要求:顶部块都占据各自应该所在的位置,但颜色上需要旋转后才能颜色对齐。
例如下面的图片,底部是还原好的,顶部当前各个块位置都是正常排布的:能明显看到绿色的两个角块是在一起的,也能看到白色两个角块也是在一起的;被遮住侧的两个黄色角块与蓝色角块也是在一起的,只要角块在原位置旋转就会整个颜色对齐。
在这里插入图片描述

最后:顶部还原,达到要求:在最终不影响顶部块位置排序基础上,把块颜色旋转好。
在这里插入图片描述

(这其中提了两个概念:一个是颜色还原 vs 块位置排序还原;例如底部还原,颜色还原比较好理解,但如果块位置排序不正确的话,周边的颜色就会不正确。例如块排序应该是1234,但1432也能让底部颜色一致,但却不能让周边颜色也正确。)

3. 转动-旋转

转动的过程对于任意一个角块来说:
a. 块位于三个面上,在每个面上都能发生正时针旋转和逆时针旋转。
b. 对块的旋转,转动一步,块跟着延旋转面旋转90度。
所以对于角块来说,他都有六种不一样的旋转方式;这六种方式把角块带到了相邻的3个角块位置(带到角块同一位置处分别可以从相邻的两个面上分别带过去,相邻面呈90度垂直关系,带过去后块也呈90度旋转关系)。
同时,任意一块的转动带动整个面发生转动,面上所有块都会一起延正时针或逆时针旋转,所以对于角块的转动可以归为对于所在面的旋转。

综上:对于一个正常放置的魔方而言,操作旋转的方式有12种,分别是对六个面的正旋与逆旋。表达为F,F‘,B,B’,L,L’,R,R’,U,U’,D,D’。

4. 底部还原

在同一个面上,逆时针与顺时针互为逆操作,例如R+R‘=0-未旋转。但是如果把R+R‘中间插入其它操作,就可以形成一个特殊的变换。

常见的方法RUR‘,RU2R‘,RU’R’,可以把底面上的右前下角块换掉,换成Up面上除右后上三个角块中的一个。该操作,对右面的影响是,右面的-右前上,右前下都会发生变更。对于顶面来说,这三种情况带来的效果都是,把顶面的一个角块换到下面,同时顶面上的角块位置进行了几种调换,先是把底面上的角块放到左前上原连接右前上的位置,然后把右后上的前面连接到的右前上换成 左后上/左前上/右前下。

借助与顺时针+逆时针中间添加另一面的单向操作,可以完成对设定底面的任意一个块的替换,并且不会影响到底面其它三个块,所以这个方法可以支撑底面还原。

5. 顶部块位置排序还原

顶部位置排序还原时,要确保前提是不破坏底部已还原好的部分,所以顶部位置排序还原算法种应该能够把对底部的变动在结束后消除掉。

借助与上面的类似RU‘R的操作,把一个底角换到上面,从影响消除的角度,可以反向执行R’UR,立刻可以把底角换回来,不过这种纯逆操作也同时对顶面没有影响,不符合要求。另一个角度,从角块的角度考虑,一个角块有三个面,底面不变的前提下,可以从一个侧面换出去,从另一个侧面换进来,这样的变换就会在不影响底面的前提下,对顶面形成干扰。

解题的思路就是:从角块的一侧面换出,从角块的另一侧面换入;使用这个方法,需要对角块进行一个竖向的90度旋转,借助换出时的回退步骤,或者换入时的开始步骤都可以用于实现90度旋转。

以右前下角为例,这样的组合策略有:6种
RU’R’U‘F’UF(右后上角块位置颜色不变,左前上颜色不变,左前上角块与右前上互换位置)
RUR‘U’F‘U’F(左前上角块位置颜色不变,右前上颜色不变,右前上与右后上位置互换)
RU2R‘U2F’U‘F(右后上与左前上角块颜色不变,左前上角块与左后上互换位置)
以及逆操作
F‘U’FURUR’(右后上角块位置颜色不变,右前上颜色不变,左前上角块与右前上互换位置)
F’UFURU’R‘(左前上角块位置颜色不变,右后上颜色不变,右前上与右后上位置互换)
F‘UFU2RU2R’(左前上与右前上角块颜色不旋转,右前上角块与右后上互换位置)

借助从底部角块从一侧换出,从另一侧换入,实现底部不变,顶部角块换位/旋转,最终实现顶部的排序正常。换位的过程或一次或两次,一般都可以把角块位置换好,部分情况也直接把顶部块颜色也还原好了,直接完工。

6. 顶部块颜色还原

继底部还原+顶部块次序调整好后,接下来就是顶部颜色的还原,顶部颜色的还原需要达到的前提要求是:保证之前的要素不变,顶部还原需要在最后步骤时保持住底部还原与顶部块次序不变。

同样是借助于类似RUR’,RU2R‘(RU’R‘是不能够使用的,它会触发底部竖向旋转)的组合操作,不过这次借助的是从一侧换出,最终还是从该侧换入,保证了顶部次序不变。

仍然以右前下角块交换块为例,组合策略有:
从右侧面进行变换:
RU2R‘U’RU’R’ (右后上块保持不变,上面其它块逆时针旋转90度)
RUR‘URU2R‘(左前上块保持不变,上面其它块顺时针旋转90度)
从左侧面进行变换与从右侧效果类似:
F’U’FU’F’U2F(右后上块保持不变,上面其它块逆时针旋转90度)
F’U2FUF’UF(左前上块保持不变,上面其它块顺时针旋转90度)
这种策略可以保证了保持其中右后上或左前上块不变的情况下,完成顶面其它3个块的90度旋转。有的是顺时针旋转90度,有的是逆时针旋转90度,顺时针与逆时针可以互相还原。同时也可以把一个操作执行3次,旋转270度,还原自身。

经过顶侧的还原策略执行后,最终完成了整个魔方的还原。

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夜喜雨

稀罕你的喜欢!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值