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