耗子哥哥 发表于 2012-1-23 18:03:55

降阶法还原554魔方——Java动画教程

感谢东贤设计出如此有创意的四阶魔方结构,感谢ayi篡改东贤四阶的设计改造出4×4×5以及5×5×4两款魔方,感谢CCA(魔方收藏协会,非东北伪CCA)的团体力量获得了ayi的青睐,反正我们比各位先一步拿到了全新的554魔方,获得了全新的乐趣。

  反正我对魔方的兴趣从来不是傻背公式傻练速度,各位也不要指责我往这么一堆塑料里面砸钱打水漂,我对魔方的兴趣在于挑战每一个新鲜的魔方去尝试破解还原的过程,所以我更喜欢去获得每一款新鲜设计的魔方之后沉浸在解谜的乐趣之中。
  骂我笨我也就受着了,记得前几天回过一个帖子,那位兄弟用虚拟的魔方研究解法,说实话我挺佩服他的,谁叫咱的空间想象力差呢,这不是做不到凭空想象出一个魔方,只好去买来玩。
  反正相比那些没热情了解新魔方、没脑子尝试新魔方、没思路自行完成魔方还原的群体来说,我不会用那种吃不到葡萄说葡萄酸的心理加上“没脑子只能玩收藏”的句式去数落别人“没钱只能拿一个三阶傻练”,都是玩魔方,找到自己的乐趣就是,为了挤对别人而狂吠只能让别人看笑话。

  追求破解的乐趣,最大的成就感就在于把自己的解法公布出来,然后可能很久以后有人告诉你“我是根据你的帖子学会的怎么还原××魔方”,那种发自内心的误人子弟的快感估计那些苦练速度手法的群体永远也不可能享受到,毕竟让人从无到有的启蒙是质变,而用自己的一个公式的花活给人带来的提高充其量不过是一点点的量变而已。

  不往远扯了,还是介绍我处理554魔方的方法,准备享受误人子弟的快感。

——————————我是开始讲解方法的分割线——————————
  我处理554魔方的基本思路是降阶,中心思想是将5×5面的中心3×3拼合,再将5×4面的每个1×5中间的1×3拼合,这时候这个魔方就被降阶成334,进而用334的方式处理。

  先把Java的使用说明一下,我没有专门处理554的形式Java,采用五阶魔方去掉中层的形式表现,所以这个魔方的中层永远是灰色,只要你能理解这一层实际上不存在,就能和554魔方相对应。

  PirzerENG
  5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5
  4,4,4,4,4,4,4,4,4,4,6,6,6,6,6,4,4,4,4,4,4,4,4,4,4
  3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
  2,2,2,2,2,2,2,2,2,2,6,6,6,6,6,2,2,2,2,2,2,2,2,2,2
  1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  放心,我的Java表现不会有554魔方中不可能出现的状态,因此可以替代。

第一步,完成5×5面的中心3×3

  这个步骤很简单,简单到我觉得没多大必要专门去说明,会五阶拼中心就应该会,而且只需要处理两个面,如此简单的处理我就不专门解释了。

  PirzerENG
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,3,3,0,6,6,0,3,0,6,6,0,3,3,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,0,0,3,6,6,3,0,0,6,6,0,3,3,6,6,6,6,6,6

  PirzerENG
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,3,3,3,6,6,3,3,3,6,6,3,3,3,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,0,0,0,6,6,0,0,0,6,6,0,0,0,6,6,6,6,6,6

第二步,完成5×4面的每个1×5中间的1×3拼合
  这个步骤分为两个步骤,一个是1×3的外侧两块相拼合,第二个步骤则是补上这两块的中间。
  步骤一:

  PirzerENG
  6,6,6,6,6,6,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  步骤二:

  PirzerENG
  6,6,6,6,6,6,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  分别讲解好了:
 2-1.拼合1×3两端
  同一个步骤,需要分为两个部分,一个是两个中层中不需要考虑顶(底)面颜色的拼合,另一个则是需要考虑顶(底)色一致的拼合。
  看图:顶(底)层颜色相同才是正确。

  PirzerENG
  6,5,6,5,6,6,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,6,3,6
  这个步骤我才用的方式是将2×2×2的方式把角块当成整体(图中红色块),这样的两个角块相互交换,就能完成需要的两端拼合。

  PirzerENG
  6,6,6,5,5,6,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  5,5,6,5,5,5,5,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  5,5,6,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,5,5,6,6,6,5,5,6,6,6,6,6,6,6,6,5,5,6,6,6,5,5
  如果只需要处理顶层,则将1×2×2的角块(图中红色块)相互交换即可。
  PirzerENG
  6,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  5,5,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,5,5,6,6,6,5,5,6,6,6,6,6,6,6,6,5,5,6,6,6,5,5


[ 本帖最后由 耗子哥哥 于 2012-2-6 17:14 编辑 ]

耗子哥哥 发表于 2012-1-23 18:04:58

续:
  这里需要加一个“提高班”,建议进行1×3两端拼合的时候,适当地将步骤进行整合,可以省去不少多余的步骤,如:
  2-1-1.中层顶层同时还原
  这个步骤解释起来并不复杂,已知是这两个大块(如图)进行交换,那么借助这一次交换完成中层顶层两部还原的组合并不复杂。

  PirzerENG
  6,6,6,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,6

  PirzerENG
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,5,6,5,6,6,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,6,6,0,6,6,6,6,6
  2-1-2.一次至少完成两棱拼合
  如Java例子,两个中层红色块进行拼合的时候,相应的两块不动的是蓝和绿,如果选择另一面(R面)适合的色块完成这一次交换(如Java表示蓝橙的条,可以同时完成两个1×3条。同样这个技巧可以运用在顶层,Java同时表示了。
  PirzerENG
  6,4,6,5,6,6,4,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,2,6,4,6,6,2,6,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,5,6,1,6,6,5,6,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,0,6,0,6,6,6,6,6,3,6,6,6,6,6,6,6,6,6,0,6,3,6,0,6

  PirzerENG
  6,4,6,4,6,6,4,6,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,5,6,5,6,6,5,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,2,6,1,6,6,2,6,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,0,6,0,6,6,6,6,6,0,6,6,6,6,6,6,6,6,6,0,6,3,6,3,6
  好的,下面提供Java演示的动画,顺便说明一下,因为公式是我自己试出来的,所以比较复杂,如果需要可以去查别人介绍的相关233、334教程中那个比较简单的公式,作用是相同的。  同时处理两层的“换大角”:

  PirzerENG
  TR2 TL2 TU TL2 TU' TR2 TU TL2 TU' TL2 TU TR2 TU2 TR2 TU TR2 TU TR2 TU2
  6,6,6,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,5,6,6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,6
  只处理一层的“换大角”:

  PirzerENG
  TR2 TL2 U TL2 U' TR2 U TL2 U' TL2 U TR2 U2 TR2 U TR2 U TR2 U2
  6,6,6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,6
 2-2.拼合1×3中心
  这个步骤应用的就是334互换棱块的公式,关键还是看你怎么用好它。
  因为对棱换的公式比较简单易记,所以如果你不是盲目追求速度的话,记住这一个公式就可以通过调整组合完成,看Java说明:

  PirzerENG
  TR2 TU2 TR2 TU2 TR2 TU2
  6,5,1,5,6,6,5,1,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,4,5,4,6,6,4,5,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,3,0,3,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,3,0,6
  同样加上一个“提高班”吧:还是一样,两层一起处理能省事儿。
  2-1-1.组合中层和顶层
  比较容易理解,看前面的Java就好,不专门说明了。
  2-1-2.利用同色的中层
  很容易遇到这种情况,就是中层的8条都已经处理好了,而需要单独处理顶(底)层,但是如果把公式变成[]就会出现对棱换的特殊情况,不过只要你稍稍动动脑子,偷懒的方式还是有的,例如下面这个Java,借助相同颜色的中块(F和B面的红色),即使反复交换也不会有区别,这样完成顶层的交换就能偷不少懒。

  PirzerENG
  TR2 TU2 TR2 TU2 TR2 TU2
  6,5,1,5,6,6,5,5,5,6,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6
  6,6,6,6,6,6,4,4,4,6,6,6,6,6,6,6,2,2,2,6,6,6,6,6,6
  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  6,4,5,4,6,6,5,5,5,6,6,6,6,6,6,6,4,4,4,6,6,6,6,6,6
  6,6,6,6,6,6,2,2,2,6,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6
  6,3,0,3,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,3,0,6

  这个步骤完成之后,整个554魔方就变成了一个334,就像五阶魔方教你降阶以后就没必要单独教你三阶的解法一样,554处理到这个时候,下面的方法就和334完全一样了,我也没必要费力气介绍。

  等我去找个链接帖过来好了。
  讲完收工!
  另:跟老大求3×4×5魔方一个,欲破解~~

[ 本帖最后由 耗子哥哥 于 2012-1-23 18:08 编辑 ]

耗子哥哥 发表于 2012-1-23 18:06:00

原帖由 cube_master 于 2012-1-23 18:40 发表 http://bbs.mf8-china.com/images/common/back.gif
可试试胡波老师的Java助手
http://www.mf8-china.com/Java/KBMF.html


5
5
4
10


哈,感谢老大回贴,不过的确是想象力不够,不熟悉这个Java的运行方式,等我去尝试一下。


原帖由 liuximing1999 于 2012-1-25 18:20 发表 http://bbs.mf8-china.com/images/common/back.gif
我的方法是降到F、L、R、D都只能转180度的三阶玩,不过你的方法好像更好。

  估计你的方法和我之前的方法基本相同,在完成前面这些步骤之后,将4×5的面中,2×3的中心组合(这个步骤比较容易吧),然后再把4格的那个棱上的两个棱块拼合。
  我没找到好的方法,处理的方式是转中层—用四阶单翻棱的操作处理某一个棱块反转—中层转回来,用这样的方法依次处理每一个棱块组合,很繁琐的。

  你有什么好的技巧没有?分享一下?

[ 本帖最后由 耗子哥哥 于 2012-1-25 20:46 编辑 ]

野 子 发表于 2012-1-23 18:18:36

这个解法很牛

cube_master 发表于 2012-1-23 18:40:31

可试试胡波老师的Java助手
http://www.mf8-china.com/Java/KBMF.html


5
5
4
10
99d658
f3a0e2

默默无闻 发表于 2012-1-23 19:44:21

大年初一,路过.顶牛人!

谢老师 发表于 2012-1-23 19:55:43

http://www.mf8-china.com/Java/KBMF.html

这个是好东东啊! 只是不太会用啊!


耗子哥哥V5! 技术交流分享! 赞!

谢老师 发表于 2012-1-23 19:58:28

终于看到JAVA图了! 还以为我的电脑有问题,原来是网速太慢了……

hubo5563 发表于 2012-1-23 21:20:37

其实我的java用起来是很方便的,不是你想象的那么难。
我把你教程中的所有java都用我的java代码替换了,你将附件下载后解压,用记事本打开,粘贴到贴子里即可。

记住,记事本不要设置自动换行。

最前面的两个作为例子:

第一步,完成5×5面的中心3×3
  这个步骤很简单,简单到我觉得没多大必要专门去说明,会五阶拼中心就应该会,而且只需要处理两个面,如此简单的处理我就不专门解释了。

5
5
4
10
f3a0e2
99d658
ffffff224ff422ff244ffffff
ffffffffffffffffffff
ffffffffffffffffffff
ffffffffffffffffffff
ffffffffffffffffffff
ffffff442ff242ff244ffffff
  →   
5
5
4
10
f3a0e2
99d658
ffffff222ff222ff222ffffff
ffffffffffffffffffff
ffffffffffffffffffff
ffffffffffffffffffff
ffffffffffffffffffff
ffffff444ff444ff444ffffff


[ 本帖最后由 hubo5563 于 2012-1-23 21:25 编辑 ]

野 子 发表于 2012-1-23 21:31:19

回复 9# 的帖子

胡波老师的软件确实是好
但是一点上去软件里的魔方一顿乱转,好晕,XYZ都分不清了 呵呵,计算机不是很擅长,感觉好复杂
代码是啥意思?干啥用的?
页: [1] 2
查看完整版本: 降阶法还原554魔方——Java动画教程