MATLAB写的三维魔方解算GUI 两种算法(Thistlethwaite算法和Kociemba算法)
大二的時候,沒什么事情,打算用MATLAB做一個三階魔方機器人,所以使用GUI做了個上位機,使用MATLAB編寫的3階魔方GUI,可以實現魔方狀態設置(始末狀態都可以設置),使用 patch 實現的魔方的旋轉動畫效果,可以調節旋轉的速度,最開始打算用MATLAB實現解算算法的,但后來放棄了,主要是太難了,參考的兩套算法都是用C#和C++實現的,而考慮到MATLAB運行機制的原因和算法的分析涉及的數學知識確實太高深了,可以先看看這篇文章(當然Kociemba算法可沒有這么簡單,他的剪枝做的厲害,優化也是很深入的),因此我在這里提供了兩個魔方解算的DLL,是兩種不同的算法實現的三階魔方的解算,其中 Kociemba的解算結果比較好,我在DLL中限定了輸出條件為解算步驟小于等于21步就輸出,但是 Thistlethwaite 算法的話由于其數學理論決定了最大50+步,而一般確實是在25步以上,所以建議使用C++版本的DLL。
先放工程下載鏈接:
魔方解算上位機GUI完整源碼鏈接
Kociemba算法C++dll工程+Kociemba算法C++控制臺輸出工程 + Thistlethwaite算法C#WinForm工程
效果圖:
需要注意的有:
①想要運行DLL必須要有支持的編譯器,最好有個VS吧,由于我使用的是MATLAB2014a,因此VS版本不能高于VS2013,如果你的電腦mex -setup -v
顯示找不到編譯器的話,那就很尷尬了,這個比較麻煩,我確實不敢去改環境變量,同時每次啟動MATLAB都需要改一次,這很不方便,曾經的我選擇了重裝系統。
②GUI中有調用攝像頭的部分,因此你的MATLAB最好是破解完全的,沒破解完全會缺少一個相機包,不過百度一下就解決了,很簡單。
③GUI是個半成品,沒有做完后面的圖像識別和串口發送,神經網絡給了一部分(基本原理就是根據HSV和RGB來預測顏色,測試過識別的準確率有97%以上,當然,最好多做點樣本,不同光照的也做一下),串口發送接收也很簡單,我已經在Serial_Communication腳本里寫了一個MATLAB操作串口的東東,也實驗過,是可以用的。
④KociembaCubeDLL名稱的幾個.dll/.exp/.h/.lib是C++的支持庫,其他的.mtb和.ptb沒有用,只要運行就會生成,是twophase(Kociemba)算法的剪枝表,刪除了一運行就會生成。TEST函數是調用這個dll的方法。同時我也在2phase文件夾里放了dll庫的release版本。
⑤在support文件夾的CF_Cube_Algorithm.dll是C#的支持庫,是Thistlethwaite算法的實現庫。函數GetResult是調用這個dll的方法。
⑥由于當時我的電腦是x64的系統,因此dll生成的是x64版本的,不知道對x32有沒有影響。不過x64肯定是沒問題的。
⑦本人水平有限,GUI做的很粗糙,在這里放出來主要是給對這方面感興趣的人提供點學習資料,畢竟當初我也花了不少時間弄這個。
Thistlethwaite算法中使用了這樣的魔方表述方式,如果有人不知道怎么這樣( UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR)表示魔方的話:可以看這篇文章
Kociemba算法中使用了這樣的魔方表述方式,這個應該很清晰明了。
輸入順序:R(Green)–B(Orange)–L(Blue)–F(Red)–U(Yellow)–D(White) 看第五個是什么就行了
Input =‘HH RGRGGRGGG HH BYYBOOWYR HH GGOWBBBBB HH BBYWRWWRW HH ORWRYYYYG HH OWOOWOYOR’;
其中的HH可以理解為只是一個分隔符,沒有任何意義。
總結
以上是生活随笔為你收集整理的MATLAB写的三维魔方解算GUI 两种算法(Thistlethwaite算法和Kociemba算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android高品质游戏,看看你out没
- 下一篇: android开发蓝牙传输图片,如何发送