日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB写的三维魔方解算GUI 两种算法(Thistlethwaite算法和Kociemba算法)

發(fā)布時(shí)間:2024/5/8 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB写的三维魔方解算GUI 两种算法(Thistlethwaite算法和Kociemba算法) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大二的時(shí)候,沒什么事情,打算用MATLAB做一個(gè)三階魔方機(jī)器人,所以使用GUI做了個(gè)上位機(jī),使用MATLAB編寫的3階魔方GUI,可以實(shí)現(xiàn)魔方狀態(tài)設(shè)置(始末狀態(tài)都可以設(shè)置),使用 patch 實(shí)現(xiàn)的魔方的旋轉(zhuǎn)動(dòng)畫效果,可以調(diào)節(jié)旋轉(zhuǎn)的速度,最開始打算用MATLAB實(shí)現(xiàn)解算算法的,但后來放棄了,主要是太難了,參考的兩套算法都是用C#和C++實(shí)現(xiàn)的,而考慮到MATLAB運(yùn)行機(jī)制的原因和算法的分析涉及的數(shù)學(xué)知識(shí)確實(shí)太高深了,可以先看看這篇文章(當(dāng)然Kociemba算法可沒有這么簡單,他的剪枝做的厲害,優(yōu)化也是很深入的),因此我在這里提供了兩個(gè)魔方解算的DLL,是兩種不同的算法實(shí)現(xiàn)的三階魔方的解算,其中 Kociemba的解算結(jié)果比較好,我在DLL中限定了輸出條件為解算步驟小于等于21步就輸出,但是 Thistlethwaite 算法的話由于其數(shù)學(xué)理論決定了最大50+步,而一般確實(shí)是在25步以上,所以建議使用C++版本的DLL。

先放工程下載鏈接:

魔方解算上位機(jī)GUI完整源碼鏈接

Kociemba算法C++dll工程+Kociemba算法C++控制臺(tái)輸出工程 + Thistlethwaite算法C#WinForm工程

效果圖:





需要注意的有:
①想要運(yùn)行DLL必須要有支持的編譯器,最好有個(gè)VS吧,由于我使用的是MATLAB2014a,因此VS版本不能高于VS2013,如果你的電腦mex -setup -v
顯示找不到編譯器的話,那就很尷尬了,這個(gè)比較麻煩,我確實(shí)不敢去改環(huán)境變量,同時(shí)每次啟動(dòng)MATLAB都需要改一次,這很不方便,曾經(jīng)的我選擇了重裝系統(tǒng)。
②GUI中有調(diào)用攝像頭的部分,因此你的MATLAB最好是破解完全的,沒破解完全會(huì)缺少一個(gè)相機(jī)包,不過百度一下就解決了,很簡單。
③GUI是個(gè)半成品,沒有做完后面的圖像識(shí)別和串口發(fā)送,神經(jīng)網(wǎng)絡(luò)給了一部分(基本原理就是根據(jù)HSV和RGB來預(yù)測顏色,測試過識(shí)別的準(zhǔn)確率有97%以上,當(dāng)然,最好多做點(diǎn)樣本,不同光照的也做一下),串口發(fā)送接收也很簡單,我已經(jīng)在Serial_Communication腳本里寫了一個(gè)MATLAB操作串口的東東,也實(shí)驗(yàn)過,是可以用的。
④KociembaCubeDLL名稱的幾個(gè).dll/.exp/.h/.lib是C++的支持庫,其他的.mtb和.ptb沒有用,只要運(yùn)行就會(huì)生成,是twophase(Kociemba)算法的剪枝表,刪除了一運(yùn)行就會(huì)生成。TEST函數(shù)是調(diào)用這個(gè)dll的方法。同時(shí)我也在2phase文件夾里放了dll庫的release版本。
⑤在support文件夾的CF_Cube_Algorithm.dll是C#的支持庫,是Thistlethwaite算法的實(shí)現(xiàn)庫。函數(shù)GetResult是調(diào)用這個(gè)dll的方法。
⑥由于當(dāng)時(shí)我的電腦是x64的系統(tǒng),因此dll生成的是x64版本的,不知道對(duì)x32有沒有影響。不過x64肯定是沒問題的。
⑦本人水平有限,GUI做的很粗糙,在這里放出來主要是給對(duì)這方面感興趣的人提供點(diǎn)學(xué)習(xí)資料,畢竟當(dāng)初我也花了不少時(shí)間弄這個(gè)。

Thistlethwaite算法中使用了這樣的魔方表述方式,如果有人不知道怎么這樣( UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR)表示魔方的話:可以看這篇文章

Kociemba算法中使用了這樣的魔方表述方式,這個(gè)應(yīng)該很清晰明了。
輸入順序:R(Green)–B(Orange)–L(Blue)–F(Red)–U(Yellow)–D(White) 看第五個(gè)是什么就行了
Input =‘HH RGRGGRGGG HH BYYBOOWYR HH GGOWBBBBB HH BBYWRWWRW HH ORWRYYYYG HH OWOOWOYOR’;
其中的HH可以理解為只是一個(gè)分隔符,沒有任何意義。

總結(jié)

以上是生活随笔為你收集整理的MATLAB写的三维魔方解算GUI 两种算法(Thistlethwaite算法和Kociemba算法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。