魔方的玩法3D动画,

来源:百度文库 编辑:神马文学网 时间:2024/04/20 06:00:51

魔方玩法技巧的网页有好多了,但是好像我自己非常想做一个,总觉得自己做的会和别人的不一样吧,也许会做出一点自己的特色吧,总之,我觉得只要认真的做一件事,总是会有很好的心得。我从小家里就有一个魔方,可是我从来就没玩出过一面,几个月前,我偶尔看到了一个外国网页,突然一下我才知道玩出六面魔方原来这么简单,我平时也没有时间,主要就是在公车上、地铁上那些时间玩,我发现这是件很cool的事情,你会从自己身上发现很多惊羡的目光的:)慢慢我也学会了其他的魔方技巧和魔方解法,除此之外,我还对魔方的道理很感兴趣,计划写出一个程序,给出任意魔方的解法,当然那不是基于这些人类的魔方技巧,据说计算机的解平均20步就可以了。希望同样有兴趣的朋友多和我交流,网页下面就可以给我写信。希望大家都能在魔方中找到乐趣!
魔方别看只有26个小方块,变化可真是不少,魔方总的变化数为

或者约等于4.3·1019。如果你一秒可以转3下魔方,不计重复,你也需要转4542亿年,才可以转出魔方所有的变化。
三阶魔方总变化数的道理是这样:六个中心块定好朝向后,就构成了一个坐标系,在这个坐标系里,8个角色块全排列8!,而每个角色块又有3种朝向,所以是8!*38,12个棱色块全排列每个有2种朝向是12!*212,这样相乘就是分子,而分母上3*2*2的意义是,保持其他色块不动,不可以单独改变一个角色块朝向,改变一个棱色块朝向,和单独交换一对棱色块或一对角色块的位置。 至于为什么,我建议大家自己先想想,我初步写了一些,你可以到这里看看。
由此可见啊,这么多变化用很短时间变回六面同色不是很简单啊。不过听说世界上最快的人10.36秒就可以还原一个魔方(记录创造于2007年2月24-25日的比利时公开赛),记录保持者是来自法国的Edouard Chambon。
其实如果学会方法,你也可以的。那些人为什么会这么快呢?因为他能记住好多的算法,或者也有叫公式的,说白了,就是左拧拧右拧拧的一套组合动作,从而把一个特定的块移到你想要的位置,或者得到你想要的某种形态。世界上顶尖的选手,据说可以记住600多个算法。我们这里介绍的是入门魔方解法,所谓入门就是算法越少越好,因为说实话,如果不是天天玩,算法挺容易忘的,这个入门魔方教程,涉及的算法就很少,而且都很简单, 六面还原的全过程基本上很容易记得。
在开始之前,我还要啰嗦一下魔方的结构,怕有的朋友不熟悉,魔方六面的中心块的相对位置是固定的,这个你拆过魔方就会知道,我敢保证在你照后面的方法开始拧来拧去的时候,很容易就忘记前后左右开始是什么颜色,这样就拧乱了,所以你开始一定要定好一个你喜欢的朝向。在这里我选蓝色做为顶面,绿色为底面,红色前面,橙色后面,白色左面,黄色右面。 当然你可能贴纸贴的就跟我不一样,魔方六面贴纸应该有5*3!=30种贴法吧,为啥呢?因为假如你指定蓝面为顶面,那么底面就应该有5种选择,还剩下4面构成一个环,这个环去除了旋转对称共有3!种贴法,对吧:)我选的如下图。  第一次打开动画会稍慢,后面的动画就会几乎瞬间打开了。
点击这个上面的按钮会出来一个窗口,这个3D图形是用java applet做的。如果你想要它的源码可以到这里看看,感谢Werner Randelshofer的卓越工作。这个动画使用起来很简单方便。

关于播放动画的Java Applet:如果你的机器没有安装Java运行环境(Java Runtime Environment),通常你的浏览器会提示你安装,如果出于某种原因,他没有提示(Firefox一般不会),只是在图形位置显示了一个X,那你就需要自己动手从这里下载一下了:Java Runtime Environment(简体中文版),或者here (English Version),或者这里(繁体中文版)。 如果以上链接太慢,您可以试试新浪下载,太平洋下载,硅谷动力下载。
如果你想改变后面所有动画里六面的颜色,可以在这里设置。
请从这里选择一种颜色
然后点击下面的小方块分配颜色

左 前 右 后

最后
好像预备的文字太多了,大家看得很乏味了吧,下面我们开始讲怎样玩魔方吧。
(第一步)在第一面做一个十字,形成如下的样子:
注意啊,每个侧面的棱和中心是同色的。做成这步的方法很多,我建议你自由发挥。如果实在有困难,我这里提供一个万全的办法,就是把蓝色棱色块变到底面上去,然后对好侧面颜色,再翻上来。我这里就举一个例子大家就应该明白了,对于左图B位置,我们当然一步就可以变到底面,但是有时候这影响了已经对好的红色面,你在对好侧面,把蓝黄棱色块从底面翻上来之前需要恢复红色面的位置。具体操作见下。
FDF‘

R2180°
动画会自动播放,你也可以用播放条右边的按钮一步一步看。
我说的够清楚了吧。而对于A和C位置你可以旋转该面,让其变到B或D位置。

照上面说的,你应该就可以做好十字啦。这里我给初学者建议一种更清晰的方法,我们的蓝色棱变到底面之后,可以不急着把它翻上去,可以变成左图这个样子,注意在底面上4个棱可以是任意顺序,这会给你减少很大难度,最后把他们逐一对好侧面颜色翻上去 就行啦。按照这种方法后面步骤的动画:
下面我要说说标记。你没准注意到上个表格里的一些奇怪的字母,那些字母的意思很简单,
F = front face 前面 B = back face 后面 R = right face 右面
L = left face 左面 U = up face 上面 D = down face 下面
以上面的表里的标记为例,F就代表前面顺时针转90°,F‘代表前面逆时针转90°,R2代表右面转180°,就这么简单,大家明白了吧。
另外,如果你的魔方是有数字的魔方,或者带图形、带图案的魔方,那么你六面中心块就有了朝向的问题,你可以参考这一页在此步对好侧面中心块。
(第二步)对好第一面,加上四侧面的T字型,形成:

做好这一步其实你只要学会一招就够了。那个蓝色的角色块,转来转去之后就6种位置,

对于A位置,只需下面3步,
FDF‘

而对于B位置,其实完全一样,就是把刚才的3步对于顶面对角线做一个镜像,变成 R‘D‘R。
如左图,对于顶面对角线做一个镜像,我们将在后面无数次的遇到,所以请大家一定注意这个镜像的意义。
(此动画设为不自动播放,请按播放键开始)
而对于C,D,E,F位置,你总可以用旋转侧面和底面将其转到A或B位置。这里是个例子:
这样第二步就完成了,我们已经打好了地基,简单吧。
(第三步)放第二层的棱色块,变成形如

咋变呢?还是一个算法,加上他的对角线镜像,就搞定了。这次我们把魔方要翻过来了,蓝面朝下,绿面朝上,其他面也相应调整。
下面就是这个算法,我们要把顶面上的红白色块变到表里最后一个图所示的位置
URU‘R‘

U‘F‘UF


整个算法是URU‘R‘ + U‘F‘UF,是不是很有规律?我们看,好像后一半U‘F‘UF正好是 前一半URU‘R‘的对角线镜像吧,是吧?我们看前四步URU‘R‘的作用是把左图里我们要的两个 小块组合起来,上表中标为红色的第5图显示了组合好的两个色块,而后四步U‘F‘UF则是把我们组合好的两个小块填近正确的位置。
所以,如果我们遇见,

该怎么办呢?答案就在上一段里面,我们的算法就是上面算法的对角线镜像,也就是前半后半颠倒过来,成为U‘F‘UF + URU‘R‘
U‘F‘UF

URU‘R‘

会有一些情况下,你需要的棱色块不在顶面,而在第二层的错误位置或者朝向,这时咋办?首先,你要先做在顶面上的那些, 可能不听话的棱色块会自己变到顶面上,如果最后他还是不听话,如左图,我们就用上面算法把个无关大局的棱色块搞到该位置,我们要的那个红白棱色块就自然换到顶层了,这稍微有点麻烦,不过对于我们初等解法只能这样先忍忍了,这也可能会激发大家去学高级的解法吧:)
除此之外,你还可以试试这个算法F‘ U2 L‘ U L U2 F。和上面的算法起同样的作用。注意,开始状态不太一样。
和他的对角线镜像:R U2 B U‘ B‘ U2 R‘
至此,第三步也讲完了,好像我们到现在为止一共就学了2个算法吧,所以大家要加油啊。
下面的步骤我给你提供两条路径,他们很相似,其实只差一步,第一条路径就是本页,它的优点是形态很好识别,非常便于你提高速度,只是第六步算法稍难记一点点,第二条路径请点这里,他的优点是算法很好记住, 但是第五步识别形态稍耽误时间,我个人喜欢第一路径。
(第四步)在魔方新的顶面上画十字
变成:

下面我们要学一个新的算法,这个算法会把顶层在如下4种情况中切换,顶面的4个棱色块在旋转之后,也只可能有这4种情况,
1 2 3 4

概率1/8 概率1/4 概率1/2 概率1/8
在应用算法前,你应该参照上图顶面绿色的样子来确定你魔方的方位, 我们对好的十字并不需要四个棱的侧面颜色和下两层颜色吻合,算法如下:
R‘U‘F‘U

FR

由上表最后一图可知,在第1,2情形之间就是“点”和“一字(注意一字的朝向)”之间应用完该算法后要加一个U‘(顶面逆时针旋转90度)。
一开始呢,学一个算法的时候总是容易弄错,起初不可能记得很清楚,就很容易拧乱,这样往往会很郁闷。我建议大家应该在这个图形的pattern上找到某种提示,特别是一些比较“整”的图形,我一般记一个算法给我最大提示的就是底面的蓝色色块,因为他们是已经对好的最整的图形,他们是怎么分开又怎么重新组合到一起,然后怎么归位的,想象出一个过程或一个“故事”,这样这个算法就很容易记了,包括后面的算法都是。
又一个小思考:这里有一个问题,为什么说只有这4种情况呢,这样不会出现吗?

答案是不会, 如果你的魔方真出现了上面的情况,那么最可能的原因是有人拆过你的魔方,并且把他组装错了,如果他随机组装,根本不分颜色,那他有11/12的概率装错,解决的办法是任意翻转一个棱就行了。
他们不会出现的原因是你不可以保持其他棱色块不动,而只翻转单独一个棱色块,这在我们最初算魔方总变化数时提到过。为啥?你感兴趣可以看看这页。
(第五步)翻转魔方顶面四角,对好顶面颜色,使之形成

魔方顶面的四角只可能有8种情况,第一种就是已经对好,而其他7种如下。

概率  4/27 4/27 4/27 4/27 4/27 2/27 4/27
如果你的图案在这8种之外,那么你肯定需要拆掉魔方,调整一个角块的朝向。如果你想了解上面的概率怎么算出的可以先看看这页,不行也可以在下面发信问我。
我又要发一通大道理了,如果急着要看算法可以先跳过哈:)
首先我们观察1,2两种情况,在这两种情况里,3个未对好的块在旋转意义下是处于相同的位置的,对吧。这是他们一个特点。绿色在每个角有3种朝向,如果我们对4角进行标记,不妨把1情况叫做(1113从右上角开始标号),2情况叫做(2223),括号里的3就代表绿色块已经在顶面了,3情况(1233),4情况(2133),5情况(1323),6情况(1212),7情况(2112),你有没有发现一些规律呢?括号里数字的和一定是3的整数倍!就是这个限制,决定了我们只能有8种情况。
这个问题真是不特别简单,首先,我们出个题啊,要是魔方顶面4个角位置可以标号1、2、3,就像上面一样可以标成是(1113)(1233)等等,去除旋转后相同的情况,共有多少种标法?
如果不去除旋转相同,那么4个角就是可以区分的,这个答案很简单就是3^4=81种情况,对吧,但是如果去除旋转相同,就 比较复杂了,比如1113和3111是同一种标法,只是魔方顶面转了90度而已,你可以自己先想想这个题。
这是个组合数学的经典问题,叫做Neckless problem(就是用几种颜色的珠子穿项链),或者叫做polya定理,如果有兴趣也可以到这里看看,不过我还是推荐你先自己想一下,这里面的公式会一下子让你很faint,如果你对“欧拉数”之类的概念不熟或根本没听说过的话。
我们这种情况不用mathworld里面的那个公式,枚举法就可以啦:)不过要想的周密一点,答案是24种,我验算了和那个恐怖公式给出的答案一样。而在这24种里,4个数字的"和"被3除的余数,应该是平均分配给0,1,2吧,这个我没有证明,呵呵,这样被3整除的应该就有8个了吧。就是 对好+这7种:

现在我们开始说算法了,对于第一种情况,我们应该把顶面已经是绿色那个角放在最上面(也就是"左后角"),这时你不用关心下面两层 的哪面朝前,

应用下面算法,这个算法的作用就是保持最上面角(左后角)的朝向不变,同时把下面三个角的绿色翻上去 。
R‘U‘RU‘

R‘U2180° R

对于第二种情况,我们应该发现他就是一情况的对角线镜像是吧,所以上面算法去做对角线镜像就得到了情况二的算法:

FUF‘U

FU2180° F‘

对于3-7情况:
你有2/3的概率碰到他们,其实你完全可以自己试试,用1、2算法的组合就都可以搞定。最多用2个算法。 我鼓励大家自己研究出这个小窍门,其实很简单,算法1、2都是翻下面3个,一个逆时针翻一个顺时针翻(观察一下绿色面怎么移动的),你如果能把3-7情况摆到特定的位置翻这么一下,变成1、2情况不就搞定啦。
如果你等不及了或者觉得自己的方法不够快,可以看看这里参考3-7情况我的方法。
(第六步)调整四角顺序,使之形成:

这步很简单,首先转转顶面看看是不是已经对好(概率1/6),如果不是就首先找一条边,这条边的两个角有相同的颜色(概率2/3),像以下这些例子,另有1/6的概率你找不到这样的一条边,我们一会儿再说。

两角中间的棱颜色和下面两层的颜色我们不用关心。现在把这条边放在背面,以上表最后一个为例,变成,
正面 背面

然后应用下面算法,
LF‘LB2180°

L‘FLB2180° L2180°


如果应用完算法 ,四个角还没有和下面两层的颜色吻合,转转就可以了。这步本质上的作用就是交换了前面两个角的位置。或者说做了这样的一个逆时针旋转,这两个作用在顶面旋转过后是等效的。
如果你碰到的情况找不到这样一条有两角同色的边,你就闭着眼睛应用一遍上面的算法,就一定可以找到啦,如果你感兴趣这是为什么,可以看看这页。 这种情况其实是你需要交换一个对角线上的两个角。
另外,你也可以试试这个算法的左右镜像,使用方法一样,效果也一样。
R‘ F R‘ B2 R F‘ R‘ B2 R2
好啦,第六步也讲完拉,就差最后一步啦!先告诉大家一个好消息,最后一步不用学新的算法就行,我们用第五步的算法1和算法2就可以搞定:)
(第七步)将最后的棱色块顺序排列好
最后一步啦,大家是不是都很兴奋啊,好不容易啊,胜利就在前方了。最后一步很简单,你只要看准魔方的方向就行啦。

第一种情况,你想让3个棱逆时针旋转。(概率1/3)
首先你要把已经对好颜色的那条边放在前面。
再用第五步的算法1+U2+算法2+U2 就行啦。也就是
R‘ U‘ R U‘ R‘ U2 R U2 F U F‘ U F U2 F‘ U2
你可以上去看看算法的图。也可以看看
算法1、2中间的U2也可以换成旋转你的整个魔方180°,这样最后一个U2也不需要了。

第二种情况,你想让3个棱顺时针旋转。(概率1/3)
那么要把已经对好颜色的那条边放在右面。这时你会发现第二个图就是第一个图的对角线镜像。
所以就是算法2+U2+算法1+U2
F U F‘ U F U2 F‘ U2 R‘ U‘ R U‘ R‘ U2 R U2
如果你碰到了需要如下这样变的情况。其实很简单,你随便应用上面顺时针或逆时针的算法,然后他就会变成了第一或第二种情况。 如果你碰到的情况需要交换一对棱,或者需要做奇数次棱交换,那你一定需要把他们拆下来了:)

概率1/12 概率1/6
上面介绍的方法,虽然我们不用记新算法了,但是很长,需要16步,如果你愿意,可以再记一个算法。

R2 U‘ F B‘ R2 F‘ B U‘ R2 R2 U F B‘ R2 F‘ B U R2
这两个算法互为顶面水平中线镜像。这样就简单一些了。
如果你的魔方是有数字的魔方,或者带图形带图案的魔方,请参考这一页来最后调整中心块的朝向。
至此,我们的魔方终于完成了,大家可以好好庆祝啦:) 如果刚看完了这个入门玩法,或者你第一次完成了魔方,你最好在魔方小站论坛发个贴,分享一下你的心得,点评一下这个网页,好让我知道大家看完了是个啥感觉。 如果想让自己更厉害,那么就访问高级魔方玩法吧。送给你一个我编的秒表,测测自己的速度:)