日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

三阶魔方自动还原 vc实现

發布時間:2025/7/25 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三阶魔方自动还原 vc实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 魔方自動求解程序一般有兩種方法,一種是按照人還原魔方的步驟,一步步來,另外一種是使用數學方法,魔方自有一套復雜的數學理論,其中較著名的是兩階段算法(壓縮文件中的cube430.exe使用的就是數學方法,程序作者便是two-phase算法發明人,文檔中有該算法的簡介,遺憾的是沒有找到該程序的源碼)。

本程序使用的便是第一種方法。

?

程序界面仿wca的cube430.exe(文件夾中的wca-explorer.zip是這個程序的壓縮包)
程序還有bug,程序可能自動生成一個ml文件,用以保存bug發生時的魔方狀態。但也可能是其他錯誤。
如果你把自動生成的ml文件(在bug文件夾中)或者錯誤信息Email給我,我會非常感激。

?

歡迎批評和建議。

?

這個程序還不完善,現階段僅供學習之用:

  • 尚未加入還原手法輸出功能
  • 尚未實現魔方狀態有效性檢測
  • 實驗方法:

  • 依次點擊界面中的按鈕:
    Cross:??在Front面實現Cross,然后把Cross轉到底面(x')
    L1Corner:?還原底層角塊
    L2Edge:?還原第二層棱塊
    TopCross:?建立頂層十字
    MatchCross:?對好十字
    BackTopCorner?頂層四角塊歸位
    RestoreTopCorener還原四角塊
  • rotate組合框中是幾個常用的魔方旋轉操作,但是太少,可以使用Excute按鈕前面的文本框輸入旋轉命令。命令名參考文件夾中的command-conventions.bmp中示意的命令名約定。
  • Reset按鈕重置魔方
  • Empty便于抄寫魔方。點擊每個面這中間塊,則選中該塊顏色,點擊非中間塊,則該塊顏色被改為當前選中顏色。由于尚未加入魔方有效性檢測,如果改變顏色后使魔方無效,則程序會出錯。
  • save和open按鈕用來保存和打開魔方狀態文件(*.ml)
  • random打亂魔方狀態
  • solution按鈕相當于連續執行了步驟1 中提到的按鈕對應的函數
  • ??? 本程序試圖使用兩套手法實現魔方還原,但現在只實現了一種(兩套手法的任意一種都能使程序正常運行)。兩種手法的區別在于第三層的還原。前兩層是一樣的。
    第一種手法的Cross的實現使用的是當前流行手法。其余的步驟用到的手法主要參考了文件夾中的“魔方教程.pdf”,作者是廈門大學的何美生。程序中的函數與教程中的步驟是一一對應的。
    本程序使用到的資料在information文件夾中。

    ?

    下面幾個函數
    ?? //2:cfop
    ?? void HashOLL(char*);
    ?? bool IsTopFaceRestored(void);
    ?? void OLL(void);
    ?? void HashPLL(char*);//not finished
    ?? void PLL(void);
    ?? void CFOP(void);
    是第二套手法用到的函數,其中的最后一步
    ?? void HashPLL(char*);//not finished
    ? ?void PLL(void);
    兩個函數尚未實現。

    ?

    經驗總結:

  • 當要處理的狀態是很多可能狀態之一,而識別出當前的狀態是哪種狀態又比較困難時,可以考慮構造hash函數,以區別每一種狀態。求出所有可能狀態的hash值和當前狀態hash值,識別當前狀態是哪種狀態時搜索hash值即可。本程序中第二種手法還原頂面時即用到該方法。使用狀態hash的方法,可以屏蔽掉狀態的復雜性。但是我想到這個方法時,前面的程序已經成型了,所以第一種方法實現時還是用了很多if-else或者switch,搞得頭暈。
  • 本程序在調試時也遇到了很大麻煩,不可能一開始就設斷點調試的。后來采用的方法是每一個函數在出現問題時保存當前狀態成文件,然后打開文件,繼續執行時才在對應函數中設斷點調試

    歡迎此類經驗的交流,如果你想到或用到了其他的方法,歡迎跟大家一起分享。
  • ?

    源碼下載?http://download.csdn.net/source/2772692

    有些朋友下載后運行不了,是我的失誤,如果你沒裝vs2008,可能運行不了,因為vs2008編譯后的程序要用到mfc90.dll等幾個vs2008中的動態鏈接庫,而我在上傳時沒考慮到這點。那么暫時請用自己的編譯器重新編譯吧,把我的代碼只在cXDlg的頭文件和cpp文件中,很容易重新編譯的。

    至于解壓不了,應該是下載時出現的錯誤,請重新下載。

    ?

    程序運行截圖:

    1.打亂?

    ?

    ?

    2.Cross:??在Front面實現Cross,然后把Cross轉到底面(x')

    ?

    3.L1Corner:?還原底層角塊

    ?

    4.L2Edge:?還原第二層棱塊

    ?

    5.TopCross:?建立頂層十字?

    ?

    6.MatchCross:?對好十字

    ?

    7.BackTopCorner?頂層四角塊歸位

    8.RestoreTopCorener還原四角塊

    ?

    ?

    先前用OpenGL寫了一個三維魔方,但是不會自動還原,而且沒有加入360°視角轉換和旋轉動態。

    以后可能把自動還原寫成3d,這樣可以更直觀,更酷

    ?

    ?

    =====================================================

    更新:

    魔方自動還原程序3D版本和2D 修正版已經放出來了

    http://blog.csdn.net/onezeros/archive/2010/10/25/5964280.aspx

    總結

    以上是生活随笔為你收集整理的三阶魔方自动还原 vc实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。