魔方吧·中文魔方俱乐部

标题: N阶魔方的零公式复原法(JAVA版) [打印本页]

作者: yingmu    时间: 2017-8-31 10:43:21     标题: N阶魔方的零公式复原法(JAVA版)

原帖转自:魔友liujunhua的帖子http://bbs.mf8-china.com/forum.p ... %B8%B4%D4%AD%B7%A8;下面是JAVA版利于魔友们学习理解;

N阶魔方的零公式复原法
刘俊华 2008-1-12

摘要:本文介绍了一种轮换N阶魔方同簇的三个块、改变同簇的两个块的色向的一种通用方法。无论这三个块同属于哪个簇,轮换的方法是一样的;无论这两个块同属于哪个簇,改变色向的方法是一样的。而且,轮换和改变色向的方法,也是一样的。这个方法不需要死记硬背,只需要理解。本文还介绍了如何排除簇间扰动。根据魔方的相关理论,在排除簇间扰动后,只要能在同簇间进行三轮换、能改变同簇的两个块的色向,就可以复原魔方了。所以,我把这个方法称为“N阶魔方的零公式复原法”。

本方法的优点:
1、不需要记忆任何公式,就可以复原N阶魔方。

本方法的缺点:
1、步骤比经过优化的公式稍长;
2、拧起来可能不是很顺手,有时需要转动内层;

我玩魔方只有两三个月时间,琢磨出这个玩法,给我启发最大的有如下几点:
1、http://www.mf8-china.com里面介绍的魔方理论知识;
2、http://www.rubik.com.cn里面介绍的最少记忆法和三阶魔方玩法;
3、http://www.mf100.org里面介绍的四阶、五阶魔方玩法;

本方法的基本原理:假设在N阶魔方的α 平面存在三个同簇的块,分别为A、B和C(这里先假设旋转α 平面时,A可以到达B和C的位置。不能到达的情况在后面讲述)。现在要求把A、B和C进行一次三轮换而不移动其他的块。我们如下操作:
1、先找到一个和α 平面平行的平面β;
2、再找一个和α、β平面都垂直的平面γ;
3、通过旋转α平面,A、B和C都可以到达γ平面;而当它们到达γ平面后,通过旋转γ平面,它们又可以到达β平面;
4、用如下的方**换A、B和C:
(γ β2 γ') α (γ β2 γ') α (γ β2 γ') α2 (γ β2 γ')…………(式一)

下面我举几个例子。
图片1.png
【例1】上图是三阶魔方的U面。现在要进行A→B→C→A的轮换。按照上面的方法,可以设α=U,β=D,γ=L,则轮换方法为:
(L D2 L') U (L D2 L') U (L D2 L') U2 (L D2 L')
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](L D2 L') U (L D2 L') U (L D2 L') U2 (L D2 L')[/param]
[/java3]
当然你也可以选择α=U,β=D,γ=R,则轮换方法为:
(R' D2 R) U (R' D2 R) U2 (R' D2 R) U (R' D2 R)
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](R' D2 R) U (R' D2 R) U2 (R' D2 R) U (R' D2 R)[/param]
[/java3]
如果要进行A→C→B→A的轮换,设α=U,β=D,γ=L,则轮换方法为:
(L D2 L') U2 (L D2 L') U' (L D2 L') U' (L D2 L')
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](L D2 L') U2 (L D2 L') U' (L D2 L') U' (L D2 L')[/param]
[/java3]
从上面的操作,可以看出:
1、对α平面的操作,在于你想移动哪个块,以及把这个块移动到哪个位置;
2、(γ β2 γ')总是被执行偶数次(因为是三轮换),这一点刚好保证了不移动无关的块。注意一下(γ β2 γ')的逆操作就是它自身。
3、γ平面的选择不唯一,但都可以达到目的。

下面再举个例子。
图片2.png
【例2】上图是三阶魔方的U面。现在要进行A→B→C→A的轮换。我们可以设α=U,β=MU(MU为U和D的夹层),γ=L,则轮换方法为:
(L MU2 L') U (L MU2 L') U (L MU2 L') U2 (L MU2 L')
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](L MU2 L') U (L MU2 L') U (L MU2 L') U2 (L MU2 L')[/param]
[/java3]
可以看出,轮换角块和轮换棱块的方法没有什么不同。

下面举一个双对换的例子。
图片3.png
【例3】上图是三阶魔方的U面。现在要进行A和B的交换、C和D的交换。我们可以设α=U,β=MU,γ=L,则对换方法为:
(L MU2 L') U (L MU2 L') U' (L MU2 L')…………交换A和B
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](L MU2 L') U (L MU2 L') U' (L MU2 L')[/param]
[/java3]
U2 (L MU2 L') U (L MU2 L') U' (L MU2 L') U2…………交换C和D
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt]U2 (L MU2 L') U (L MU2 L') U' (L MU2 L') U2[/param]
  [param=initScrpt](L MU2 L') U (L MU2 L') U' (L MU2 L')[/param]
[/java3]
这个例子中,(γ β2 γ')被执行了6次。


附件: 图片3.png (2017-8-31 10:31:23, 499 Bytes) / 下载次数 126
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODYyfDUwMDdmNWEzfDE3MTY1NTQ2MTd8MHww

附件: 图片2.png (2017-8-31 10:31:23, 461 Bytes) / 下载次数 130
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODYxfGU1YjdmZjRkfDE3MTY1NTQ2MTd8MHww

附件: 图片1.png (2017-8-31 10:30:43, 456 Bytes) / 下载次数 143
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODYwfGFlY2YwMGZjfDE3MTY1NTQ2MTd8MHww
作者: yingmu    时间: 2017-8-31 11:51:27

本帖最后由 yingmu 于 2017-8-31 20:53 编辑

下面讲如何改变块的色向。假设在N阶魔方的α 平面存在两个同簇的块,分别为A和B(这里先假设旋转α 平面时,A可以到达B的位置。不能到达的情况在后面讲述)。现在要求改变A和B的色向,而不移动其他的块。我们如下操作:
1、先找到一个和α 平面平行的平面β;
2、再找一个和α、β平面都垂直的平面γ;
3、再找一个和α、γ平面都垂直的平面δ;
4、通过旋转α平面,A和B都可以到达γ平面;而当它们到达γ平面后,通过旋转γ平面,它们又可以到达β平面;
5、通过旋转α平面,A和B都可以到达δ平面;而当它们到达δ平面后,通过旋转δ平面,它们又可以到达β平面;
6、可以用如下的方法改变A和B的色向:
(γ β2 γ') (δ' β2 δ) α (δ' β2 δ) (γ β2 γ') α'…………(式二)
可以看出,它和(式一)的唯一区别在于:在中间的两步操作中,用δ平面替换了γ平面。

下面举例说明。
图片4.png
【例4】上图是三阶魔方的U面。现在要求把A旋转120°,把B旋转-120°。我们可以设α=U,β=D,γ=L,δ=F,则操作方法为:
(L D2 L') (F' D2 F) U (F' D2 F) (L D2 L') U'
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](L D2 L') (F' D2 F) U (F' D2 F) (L D2 L') U'[/param]
[/java3]
如果要求把A旋转-120°,把B旋转120°,我们仍设α=U,β=D,γ=L,δ=F,则操作方法为:
(F' D2 F) (L D2 L') U (L D2 L') (F' D2 F) U'
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](F' D2 F) (L D2 L') U (L D2 L') (F' D2 F) U'[/param]
[/java3]
从上面可以看出:
1、对α平面的操作,是在选择要改变色向的块;
2、操作γ平面和δ平面的先后顺序,决定了色向改变的方向;
3、在δ平面的操作一定要是偶数次,这样才能不移动无关的块。

再举一个例子。
图片5.png
【例5】上图是三阶魔方的U面。现在要求改变A和B的色向。我们可以设α=U,β=MU,γ=L,δ=F,则操作方法为:
(L MU2 L') U' (F' MU2 F) U (F' MU2 F) U (L MU2 L') U'
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](L MU2 L') U' (F' MU2 F) U (F' MU2 F) U (L MU2 L') U'[/param]
[/java3]
既然轮换和调整色向用的方法是一样的,我们就可以同时进行轮换和改变色向的操作。下面举例说明。
图片6.png
【例6】上图是三阶魔方的U面。现在要求进行A→B→C→A的轮换,同时把A旋转120°,把C旋转-120°。我们可以设α=U,β=D,γ=L,δ=F,则操作方法为:
(L D2 L') U (F' D2 F) U (F' D2 F) U2 (L D2 L')
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](L D2 L') U (F' D2 F) U (F' D2 F) U2 (L D2 L')[/param]
[/java3]
这里要特别注意先操作哪个块。假设三个块中,不改变色向的块为X,而轮换的要求是用Y替代X,在应该先对Y进行操作。这是因为中间对δ平面的偶数次操作不改变色向。色向的改变发生在操作了γ平面后,接着操作δ平面,或者反之。

下面再举个例子。
图片7.png
【例7】上图是三阶魔方的U面。现在要求进行A→B→C→A的轮换,且改变把A和B的色向。我们可以设α=U,β=MU,γ=L,δ=F,则操作方法为:
U (L MU2 L') (F' MU2 F) U2 (F' MU2 F) U2 (L MU2 L') U'
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt]U (L MU2 L') (F' MU2 F) U2 (F' MU2 F) U2 (L MU2 L') U'[/param]
[/java3]
前面我们都假设了旋转α 平面时,A可以到达B和C的位置。下面讨论不能到达的情况。
图片8.png
【例8】上图是四阶魔方的U面。现在要求进行A→B→C→A的轮换。很清楚,无论如何旋转U面,A都不可能到达B和C的。要实现这个簇内轮换,必须改变A和C的色向。我们知道,四阶魔方的棱块在某个位置的色向是唯一的。这个例子中,当A→B和C→A时,A和C必然改变色向,而B→C时,B绝不会改变色向。我们可以设α=U,β=MU,γ=L,δ=F,则操作方法为:
(L MU2 L') U' (F' MU2 F) U2 (F' MU2 F) U' (L MU2 L')
[java4=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt] (L MU2 L') U' (F' MU2 F) U2 (F' MU2 F) U' (L MU2 L') [/param]
[/java4]
另外,这个例子还可以如下实现:通过[MF2 D2]改变B块的位置,这时A、B、C都处于MB平面,且通过旋转MB,A可以到达B和C的位置。这时,设α=MB,β=F,γ=D,可以实现A→B→C→A的轮换,轮换完毕后,再通过[MF2 D2]的逆操作[D2 MF2]来恢复。全部操作为:
[MF2 D2] (D F2 D') MB2 (D F2 D') MB' (D F2 D') MB' (D F2 D') [D2 MF2]
[java4=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt][MF2 D2] (D F2 D') MB2 (D F2 D') MB' (D F2 D') MB' (D F2 D') [D2 MF2][/param]
[/java4]
这个例子说明:当旋转α 平面,A不能到达B或者C时,可以:
1.用调整色向的方法,引入另一个δ平面的方式来协助完成;
2.通过某些操作[xyz]调整A、B、C的位置,使它们都落在另一个平面ε中,而旋转这个ε平面,A可以到达B和C。当在ε平面完成A、B、C的轮换后,再用[xyz]的逆操作来恢复。

附件: 图片8.png (2017-8-31 11:45:30, 534 Bytes) / 下载次数 95
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODc5fGNmZjY5YzQyfDE3MTY1NTQ2MTd8MHww

附件: 图片7.png (2017-8-31 11:45:30, 461 Bytes) / 下载次数 90
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODc4fDJiNzE1NmE1fDE3MTY1NTQ2MTd8MHww

附件: 图片6.png (2017-8-31 11:45:30, 456 Bytes) / 下载次数 97
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODc3fDRhNDI0YzcxfDE3MTY1NTQ2MTd8MHww

附件: 图片5.png (2017-8-31 11:45:30, 418 Bytes) / 下载次数 93
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODc2fDA1YzUwYTFifDE3MTY1NTQ2MTd8MHww

附件: 图片4.png (2017-8-31 11:45:29, 405 Bytes) / 下载次数 105
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODc1fDM0ODlhZGI4fDE3MTY1NTQ2MTd8MHww
作者: yingmu    时间: 2017-8-31 11:54:27

本帖最后由 yingmu 于 2017-8-31 18:03 编辑

再举一个例子。
   图片9.png 图片10.png
【例9】上图是四阶魔方的U面。现在要求从左图变换成右图。常常有人为四阶魔方可以互换一组对棱感到惊奇。其实,它是由两个三轮换组成的。第一个三轮换是A→D→B→A,互换后的图如下:
图片11.png
在上图的基础上,在进行第二个三轮换C→D→B→C,就得到最终结果。具体的操作方法在【例8】已经讲了,我就不重复了。

再举一个五阶魔方的例子。
图片12.png
【例10】如上图,要求完成五阶魔方中三个棱块的轮换,轮换要求如图中箭头所示。设左图中绿橙色棱块和蓝红色棱块所在的面为F面,红绿色棱块的绿色所在的面为U面。我们可以先用[U B]的操作,调整绿红色棱块的位置,然后设α=u,β=D,γ=B,来完成这三个棱块的轮换,最后用[U B]的逆操作[B' U']来恢复,全部操作为:(小写的u表示顺时针旋转第二层)
[U B] (B D2 B') u (B D2 B') u (B D2 B') u2 (B D2 B') [B' U']
[java5=200,200]
  [param=scrptLanguage]PirzerENG[/param]
  [param=scrpt][U B] (B D2 B')MUU(B D2 B')MUU(B D2 B') MUU2 (B D2 B') [B' U'][/param]
[/java5]
最后谈谈魔方中存在簇间扰动的情况。把魔方的某个面旋转90°,就会产生簇间扰动;反之,把存在簇间扰动的面旋转90°,就会消除簇间扰动。簇间扰动消除后,就可以用簇内三轮换和改变簇内色向的方法,把魔方最终复原。

下面举例说明。
图片13.png
【例11】上图是三阶魔方的U面。现在只要把A和B互换,C和D互换,魔方就最终复原了。A和B属于角簇,C和D属于棱簇,而N阶魔方基本的置换是簇内三轮换,很明显,角簇和棱簇间存在扰动。我们执行一个U操作(U'操作也可以)后,发现只要再做一个角簇的三轮换和一个棱簇的双对换,就可以复原魔方了。具体的操作步骤我在【例1】和【例3】已经讲了,我就不写了。

再举一个四阶魔方簇间扰动的例子。
图片14.png
【例12】如上图,要求翻转蓝黄色棱块,把魔方最终还原。这其实是要把两个蓝黄色棱块互换位置,即做一个簇内对换。而簇内的基本操作是三轮换,说明这里存在簇间扰动。假设黄色面为U,红色面为F。我们可以按如下操作进行:
1.先做一个MB'操作,消除簇间扰动;
2.复原U面的三个棱块;
3.复原因为MB'操作而移动的MB面的三个棱块;
4.复原因为MB'操作而移动八个心块(两个一组,共四组)。
有人要说了,第4步复原移动的四组心块是个簇内四轮换,不可能用簇内三轮换的操作来完成。其实,它不是簇内四轮换,而是簇内四轮换加上一个簇内二轮换,是可以用簇内三轮换的操作来完成的。这里要注意四阶魔方的4个心块是同色的,把它们分成两组,可以做一个簇内二轮换,而魔方的心块看起来没有改变。(顺便说一下,你可以在4个心块中任选三个,做一个簇内三轮换,而整个魔方看起来没有改变。我这里指非数字魔方。)
全部操作如下(分别对应上面的4步):
1.MB'
[java4=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt]MB'[/param]
[/java4]
2.(L MU2 L') U (F' MU2 F) U2 (F' MU2 F) U (L MU2 L')
[java4=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](L MU2 L') U (F' MU2 F) U2 (F' MU2 F) U (L MU2 L')[/param]
  [param=initScrpt]MB'[/param]
[/java4]
3.(U F2 U') MB2 (U F2 U') MB' (U F2 U') MB' (U F2 U')
[java4=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](U F2 U') MB2 (U F2 U') MB' (U F2 U') MB' (U F2 U')[/param]
  [param=initScrpt]MB'(L MU2 L') U (F' MU2 F) U2 (F' MU2 F) U (L MU2 L')[/param]
[/java4]
4.[(ML MR' F2 MR ML') MB']*4
[java4=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt][(ML MR' F2 MR ML') MB']4[/param]
  [param=initScrpt]MB'(L MU2 L') U (F' MU2 F) U2 (F' MU2 F) U (L MU2 L')(U F2 U') MB2 (U F2 U') MB' (U F2 U') MB' (U F2 U')[/param]
[/java4]
其中第2步,取α=U,β=MU,γ=L,δ=F;第3步,取α=MB,β=F,γ=U; 第4步,取α=MB,β=F,γ=ML+MR(表示两个心块同步作为一组参与轮换);第4步的*4,表示对[]中的操作重复4次。

再举一个例子,是两个不同的簇中的块同步轮换。
图片15.png
【例13】如上图,要求进行A→B→C→A的轮换和1→2→3→1的轮换。取α=U,β=D+MU,γ=L,操作方法如下:
(L D2 MU2 L') U (L D2 MU2 L') U (L D2 MU2 L') U2 (L D2 MU2 L')
[java3=200,200]
  [param=scrptLanguage]SupersetENG[/param]
  [param=scrpt](L D2 MU2 L') U (L D2 MU2 L') U (L D2 MU2 L') U2 (L D2 MU2 L')[/param]
  [param=initScrpt](L D2 MU2 L') U (L D2 MU2 L') U (L D2 MU2 L') U2 (L D2 MU2 L')(L D2 MU2 L') U (L D2 MU2 L') U (L D2 MU2 L') U2 (L D2 MU2 L')[/param]
[/java3]

附件: 图片15.png (2017-8-31 11:52:46, 535 Bytes) / 下载次数 99
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODg2fDYzMTkyZGJifDE3MTY1NTQ2MTd8MHww

附件: 图片14.png (2017-8-31 11:52:46, 16.58 KB) / 下载次数 108
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODg1fDQyYzIyZTMwfDE3MTY1NTQ2MTd8MHww

附件: 图片13.png (2017-8-31 11:52:46, 484 Bytes) / 下载次数 100
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODg0fDc3ZTc0MWI4fDE3MTY1NTQ2MTd8MHww

附件: 图片12.png (2017-8-31 11:52:46, 2.05 KB) / 下载次数 102
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODgzfGY5NWI1NzY1fDE3MTY1NTQ2MTd8MHww

附件: 图片11.png (2017-8-31 11:52:45, 556 Bytes) / 下载次数 105
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODgyfDU1Mzk0MGFjfDE3MTY1NTQ2MTd8MHww

附件: 图片10.png (2017-8-31 11:52:45, 559 Bytes) / 下载次数 105
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODgxfDA3MWVhYjhjfDE3MTY1NTQ2MTd8MHww

附件: 图片9.png (2017-8-31 11:52:45, 558 Bytes) / 下载次数 101
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MjYyODgwfDlkNGEwNTYwfDE3MTY1NTQ2MTd8MHww
作者: luckybox    时间: 2017-8-31 17:08:52

不明觉厉,
作者: 折翼蚂蝗    时间: 2017-8-31 21:42:13

以前仔细研读过这个方法,感觉太繁琐,中层转动太多操作很不便。还是一般的降阶法容易点
作者: yingmu    时间: 2017-9-1 09:04:24

折翼蚂蝗 发表于 2017-8-31 21:42
以前仔细研读过这个方法,感觉太繁琐,中层转动太多操作很不便。还是一般的降阶法容易点

是比较繁琐,但对于公式的理解会有益处,特别是教孩子玩魔方,这个应该比较好理解。
作者: 赵金浩    时间: 2017-9-1 13:59:19

yingmu 发表于 2017-9-1 09:04
是比较繁琐,但对于公式的理解会有益处,特别是教孩子玩魔方,这个应该比较好理解。

我很喜欢玩魔方可是我只会拼一面
作者: hmlx    时间: 2023-7-27 17:18:10

虽不明,但觉厉。
先找到一个和α 平面平行的平面β;再找一个和α、β平面都垂直的平面γ;
既然平行了,只要垂直一个,一定垂直另一个啊。




欢迎光临 魔方吧·中文魔方俱乐部 (http://bbs.mf8-china.com/) Powered by Discuz! X2