寒水 发表于 2007-9-14 00:38:28

一个棱先法实例及其解法详解(已完成)

<P>棱先法,顾名思义,就是先还原棱部分,后角块</P>
<P>下面是棱部分的还原方法演示</P>
<P>&nbsp;</P><applet codebase="3" height="300" width="300" code="RubikPlayer.class"><param value="SupersetENG" name="scrptLanguage"/><param value="U2 R F R TU' B' CU U R U' R' CU R U' R' R' U2 R CU2 F' U F R U' R' F' U F U' R U2 R' U' " name="scrpt"/><param value="4,3,5,5,0,0,1,5,2" name="stickersFront"/><param value="4,3,3,1,1,1,0,2,3" name="stickersRight"/><param value="0,1,1,2,2,4,2,5,2" name="stickersDown"/><param value="5,4,4,2,3,5,4,4,1" name="stickersBack"/><param value="5,0,0,0,4,3,3,3,5" name="stickersLeft"/><param value="3,0,1,2,5,4,2,1,0" name="stickersUp"/></applet>

<P align=right><FONT color=#000066>[此贴子已经被作者于2007-9-14 2:38:17编辑过]</FONT></P>

[ 本帖最后由 寒水 于 2007-11-23 13:11 编辑 ]

寒水 发表于 2007-9-16 21:20:17

<p>还原角块部分,用的是角块3置换。</p><p>&nbsp;</p><p>&nbsp;</p><applet codebase="3" height="300" width="300" code="RubikPlayer.class"><param value="SupersetENG" name="scrptLanguage"/><param value="CU CF' R' D' R U2 R' D R U2 CU' CR2 R' D' R U R' D R U' CF U' R' D R U2 R' D' R U' CF' L' D2 L U L' D2 L U' CF2 B' L D' L' U2 L D L' U2 B CU2 CR " name="scrpt"/><param value="3,4,1,4,4,4,5,4,2" name="stickersFront"/><param value="2,0,3,0,0,0,4,0,3" name="stickersRight"/><param value="1,2,0,2,2,2,1,2,5" name="stickersDown"/><param value="2,1,0,1,1,1,1,1,2" name="stickersBack"/><param value="5,3,5,3,3,3,0,3,0" name="stickersLeft"/><param value="4,5,4,5,5,5,4,5,3" name="stickersUp"/></applet>

寒水 发表于 2007-9-16 21:38:18

详解会在后面陆续到来

寒水 发表于 2007-9-25 15:48:03

<p>解法</p><p>第一步,架底层十字,第二步,还原中层3个棱块,第三步,架顶层十字同时还原中层第4个棱块,第四步,用角块三置换还原角块。</p><p>第一步不再赘述。</p><p>第二步,用到两个很小的公式,也可以说不是公式 F'&nbsp; U&nbsp; F和&nbsp; R U' R' 分别对应下面两种情况</p><applet codebase="3" height="300" width="300" code="RubikPlayer.class"><param value="SupersetENG" name="scrptLanguage"/><param value="F' U F " name="scrpt"/><param value="6,6,6,0,0,6,6,0,6" name="stickersFront"/><param value="6,0,6,6,1,1,6,1,6" name="stickersRight"/><param value="6,2,6,2,2,2,6,2,6" name="stickersDown"/><param value="6,6,6,3,3,3,6,3,6" name="stickersBack"/><param value="6,6,6,4,4,4,6,4,6" name="stickersLeft"/><param value="6,6,6,6,5,1,6,6,6" name="stickersUp"/></applet><applet codebase="3" height="300" width="300" code="RubikPlayer.class"><param value="SupersetENG" name="scrptLanguage"/><param value="R U' R' " name="scrpt"/><param value="6,1,6,0,0,6,6,0,6" name="stickersFront"/><param value="6,6,6,6,1,1,6,1,6" name="stickersRight"/><param value="6,2,6,2,2,2,6,2,6" name="stickersDown"/><param value="6,6,6,3,3,3,6,3,6" name="stickersBack"/><param value="6,6,6,4,4,4,6,4,6" name="stickersLeft"/><param value="6,6,6,6,5,6,6,0,6" name="stickersUp"/></applet>

寒水 发表于 2007-9-25 16:13:48

<p><font color="#000000"></font>&nbsp;</p><p>要注意的是,<font color="#ff0000">第二层只需要还原3个棱块,</font><font color="#000000">留下一个缺口为顶层架十字服务。</font></p><p>在上面的例子中,第一个还原的棱块是白绿棱块,第二个是黄绿棱块,第三个是黄蓝棱块,状态如下</p><p><applet codebase="3" height="300" width="300" code="RubikPlayer.class"><param value="SupersetENG" name="scrptLanguage"/><param value="5,5,1,4,4,1,5,4,4" name="stickersFront"/><param value="2,5,4,5,0,0,0,0,3" name="stickersRight"/><param value="1,2,2,2,2,2,1,2,5" name="stickersDown"/><param value="3,5,4,1,1,1,1,1,2" name="stickersBack"/><param value="5,0,0,3,3,3,0,3,0" name="stickersLeft"/><param value="3,4,2,4,5,0,4,3,3" name="stickersUp"/></applet></p><p>&nbsp;</p><p>刚好,中层最后一个棱块,白蓝棱块位于顶层,满足条件。<font color="#ff0000">如果它位于中间层,无论颜色是否已经正确了,都把它移到顶层去!</font></p><p></p>

寒水 发表于 2007-10-2 01:31:00

<p>&nbsp;</p><p>好了,在此基础上,我们要进行顶层十字的构造了,从一开始到十字成型,通常有3步需要我们来完成</p><p>第 1、先令顶面有3个棱顶色(和顶层中心块一样的颜色)向上,<font color="#ff3300">同时,尚有一个拥有顶色的棱块位于中间层</font>。采用最简单的转法:R U<sup>x</sup>&nbsp; R'&nbsp; 和 F' U<sup>x </sup>F(U<sup>x</sup> 是一个变量,具体取值范围:U&nbsp;&nbsp; U'&nbsp;&nbsp; U2),至于用前者还是用后者,就取决于中层缺口处那个棱块了,如果它的顶色位于F面,那么用前者:如果黄色位于R面,则用后者</p><p>如下图&nbsp; 红色(即顶色)位于F面,因此用R U<sup>x</sup>&nbsp; R'&nbsp; 将顶色摆上</p><p>&nbsp;<br/></p><p>而这种情况,红色在R面,于是要用F' U<sup>x </sup>F</p><p></p><p>于是,我们可以用这方法来完成第 1 步了</p><p><br/>&nbsp;</p><applet codebase="3" height="300" width="300" code="RubikPlayer.class"><param value="SupersetENG" name="scrptLanguage"/><param value="F' U F R U' R' F' U F " name="scrpt"/><param value="5,5,1,4,4,1,5,4,4" name="stickersFront"/><param value="2,5,4,5,0,0,0,0,3" name="stickersRight"/><param value="1,2,2,2,2,2,1,2,5" name="stickersDown"/><param value="3,5,4,1,1,1,1,1,2" name="stickersBack"/><param value="5,0,0,3,3,3,0,3,0" name="stickersLeft"/><param value="3,4,2,4,5,0,4,3,3" name="stickersUp"/></applet>
[此贴子已经被作者于2007-10-2 20:11:02编辑过]

寒水 发表于 2007-10-2 01:51:24

<p>第2步,令顶层3个棱块相对位置正确,如何理解?上一楼魔方最后的状态:顶层有3个顶色向上的棱块,其中红白、红黄两棱块相对,因此可以认为相对位置正确,那么红绿棱块就是落在错误的位置了,那个位置是红蓝棱块的。</p><p>故而,要用红蓝棱块替换掉红绿棱块,于是乎,红白、红黄、红蓝3棱块相对位置就正确了。</p><p>&nbsp;<applet codebase="3" height="300" width="300" code="RubikPlayer.class"><param value="SupersetENG" name="scrptLanguage"/><param value="U' R U2 R' " name="scrpt"/><param value="1,1,0,4,4,5,5,4,4" name="stickersFront"/><param value="5,0,0,4,0,0,3,0,3" name="stickersRight"/><param value="1,2,5,2,2,2,1,2,5" name="stickersDown"/><param value="4,0,2,1,1,1,1,1,2" name="stickersBack"/><param value="4,3,3,3,3,3,0,3,0" name="stickersLeft"/><param value="3,4,2,5,5,5,2,5,4" name="stickersUp"/></applet></p><p>如图,由于红蓝棱块替换了红绿棱块之后,顶层3棱块相对位置已经正确,因此要用<font color="#ff0000">不含顶色的那个棱块</font>让红绿棱块替换(此时顶十字已经形成),然后判断是否需要校正(如果底十字被破坏了,就需要校正了)。</p><p>判断结果,无须校对,第3步校对被跳过,棱块部分全部完成。</p><p></p>
[此贴子已经被作者于2007-10-2 20:12:50编辑过]

寒水 发表于 2007-10-2 01:53:52

<p>上一楼的最后,再做一个U',6面十字就全部完成了</p><p>那么,如果遇到的是这种情况,又该如何解决呢?</p><p>&nbsp;</p><applet codebase="3" height="300" width="300" code="RubikPlayer.class"><param value="SupersetENG" name="scrptLanguage"/><param value="U2 R U R' U2 R " name="scrpt"/><param value="6,3,6,4,4,5,6,4,6" name="stickersFront"/><param value="6,1,6,4,0,0,6,0,6" name="stickersRight"/><param value="6,2,6,2,2,2,6,2,6" name="stickersDown"/><param value="6,0,6,1,1,1,6,1,6" name="stickersBack"/><param value="6,0,6,3,3,3,6,3,6" name="stickersLeft"/><param value="6,4,6,5,5,5,6,5,6" name="stickersUp"/></applet>
        <p>很明显,这就是需要校正的情况了,顶十字是完成了,但是,底十字被破坏。</p><p>正解是:上图最后两步不做,也就是将魔方转到下图初态时便停止,进行校正。</p><p>&nbsp;</p><p>&nbsp;</p><p><applet codebase="3" height="300" width="300" code="RubikPlayer.class"><param value="SupersetENG" name="scrptLanguage"/><param value="U' R U R' U R U R' " name="scrpt"/><param value="6,4,6,4,4,5,6,4,6" name="stickersFront"/><param value="6,0,6,3,0,0,6,0,6" name="stickersRight"/><param value="6,2,6,2,2,2,6,2,6" name="stickersDown"/><param value="6,1,6,1,1,1,6,1,6" name="stickersBack"/><param value="6,0,6,3,3,3,6,3,6" name="stickersLeft"/><param value="6,5,6,4,5,5,6,5,6" name="stickersUp"/></applet></p><p>只须再做一个 U2 ,6面十字就大功告成了</p>
[此贴子已经被作者于2007-10-2 20:48:45编辑过]

寒水 发表于 2007-10-10 23:56:05

<p>总结一下,在做顶层十字的时候,要满足一个条件:在顶十字形成之前,不管任何情况,中间层第4个棱块都必需留在顶层。</p><p>在做第1步时,根据中间层那个带红色的棱块来决定采用F'还是R,若顶层没有一个顶色向上,则任选一个给它替换,然后恢复底十字,要注意满足上述提到的条件,之后都用带顶色向上的棱块给中间层的棱块替换,直到顶层有3个顶色向上的棱块,随后转入第2步,首先看位于中层的那个顶层棱块,看它应该和哪个棱块相对,就将它转到该棱块对面,此时,把被调走的目前位于中间层的棱块转回它应在的位置,以此类推,直至顶十字形成。</p><p>第3步,确认是否需要校正。若此时底十字完好,则无须校正;若底十字被破坏,则需要校正。</p><p>如何校正?1、恢复底十字,此时顶十字被破坏,顶层只有3个棱块完全正确由这3个棱块构成一等腰三角形,以这个等腰三角形的任一底角为1号,顶角为2号,另一个顶角为3号,顶层剩下的那个棱为4号(如图),用中间层的棱块替换1号块,1号块替换2号块,2号块替换3号块,3号块替换4号块,这时候,顶十字和底十字同时形成,校正完毕,只须再根据实际情况转动顶层就可以形成6个十字了。<br/></p><br/>
[此贴子已经被作者于2007-10-10 23:56:40编辑过]

寒水 发表于 2007-11-14 00:58:18

角块的还原,用到的是角块3置换。根据参与置换的3个角位置分布的多样化,有着不同的过程,但是万变不离其宗,孙猴子不论怎么变,还是孙猴子滴……于是乎,角块3置换可以表示为f(a)=a Ux a' Ux'。我知道,你要告诉我你一头雾水,不怕,接着看下去,你会明白的!
页: [1] 2 3 4 5
查看完整版本: 一个棱先法实例及其解法详解(已完成)