魔方机器人需要特制魔方吗_解魔方的机器人攻略18 – 魔方快速算法
我們的快速魔方算法要隆重登場了,在此缺席感謝一下來自Netherlands的Jaap Scherphuis同學(xué)。看前面這個頁面的第三名。
魔方表示法
咱們先看一串天書般的字母:UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR
這種表示法是由一個叫Mike Reid的兄弟首先使用的,它表示一個已經(jīng)被解好的魔方。
先不要被這串字母嚇倒,看算法就像追mm一樣,要迎難而上。仔細(xì)觀察,你會發(fā)現(xiàn)其中只有六種字母:
U: Up
F: Front
R: Right
L: Left
D: Down
B: Back
其實這就是代表了空間坐標(biāo)系的六個方向,就是傳說中的“眼觀六路”的那六路。
表示法中包含了12組雙字母的組合,分別代表了魔方的12個棱,第一組UF就表示Up和Front之間夾角的棱。
另外還包含了8組三字母的組合,分別代表了魔方的8個角,每個角由三塊顏色組成。看下面的示意圖:
魔方坐標(biāo)系
等等,細(xì)心的朋友至少會想到兩個問題:
1,為什么沒有中心的數(shù)據(jù)?
因為魔方的六個心在任何旋轉(zhuǎn)過程中,相對位置都是不會變的,這點拆過魔方的人應(yīng)該比較容易理解。
2,如果是一個打亂的魔方,棱和邊的顏色已經(jīng)和中心不一樣了,這時候怎么表示?
讀取方法是:按照剛才那個天書字符串的順序,先找到UF位置所對應(yīng)的棱,假設(shè)現(xiàn)在U是紅色,F是黃色;
那么對照圖里的中心,紅色的中心是R,黃色的中心是U,所以這時候的第一組棱字母是 RU
嗯,希望你看到這里還沒有暈車的感覺。
輸出表示法
這個程序的輸出是這個樣子:F- U+ F- D- L- D- F- U- L2 D-
FRL之類的字母依然表示六個面,F-表示前層逆時針轉(zhuǎn)90度,U+表示上層順時針轉(zhuǎn)90度,L2表示左邊層轉(zhuǎn)180度。
如果你是魔友的話,會經(jīng)常看到這樣的字符串:F’UF’D'L’F'U’L2D’
這是魔方論壇上比較常見的“黑話”,其實就是默認(rèn)順時針不加符號,逆時針的加一個單引號,180度的加2。
請注意這里的順時針和逆時針使用的是“觀察者迎著某個面看”的參照系,例如B’是從下往上看的逆時針,如果你沒有把腦袋鉆到桌子下,你事實上看到的是順時針旋轉(zhuǎn)。
改寫到C#
這段程序是用C寫的,說實話它的原理還比較復(fù)雜,有興趣的同學(xué)可以搜索“Thistlethwaite’s algorithm”
我直接依葫蘆畫瓢用C#把它重寫了一遍,請點擊這里下載源代碼。請主要要安裝VS2008或更高版本。
http://www.diy-robots.com/RubikSolver/RubikSolverSample.zip
補(bǔ)充:如何使用這個程序
鑒于很多朋友詢問如何運(yùn)行這個程序,下載這段代碼,用C語言的編譯器編譯成Jaap.exe。然后在命令行輸入:
Jaap.exe UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR
輸出結(jié)果就是類似 F- U+ F- D- L- D- F- U- L2 D- 這樣的步驟。
注意這段程序沒有驗證功能,如果你輸入的顏色表達(dá)式錯誤,會導(dǎo)致程序死循環(huán)或者錯誤。以我的經(jīng)驗看,普通電腦都能在1秒以內(nèi)算完,如果你一秒鐘還沒有看到結(jié)果,就檢查檢查輸入吧。
總結(jié)
以上是生活随笔為你收集整理的魔方机器人需要特制魔方吗_解魔方的机器人攻略18 – 魔方快速算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: noip考python吗_青少年信奥联赛
- 下一篇: backgroundworker 导致程