當兵暑假可以完成哪些事情呢

拿起你的鱷魚皮小冊子,開始想辦法把魔術方塊轉成二維陣列,ㄏㄏ抽到密碼通譯兵,教官還以為我要抄密碼出去xd

,加上專題老師的要求魔術方塊教學軟體,老師看到了新聞說什麼日本教授透過手機拍照解魔術方塊,所以他想要做這個專題,還是硬接下來`,幾乎都是都是python呢,我們來用c#硬上吧xd [PyConTW 2013] 當 Python 遇上魔術方塊 by 戴嘉駿 20141127 Taipei.py - PyCuber 用Python解魔術方塊 RubikCuber

新增

修正一些bug,然後基於8355法去解魔術方塊 2.3實作內容 l 如何根據影像讀入魔術方塊 l 如何自動尋找魔術方塊解法 l 3D畫面呈現與動畫 l 把解法分層解法,並希望剛接觸的人也可以輕易把魔術方塊解出來 l 探討並分析,和其他人解法有何不同 三、原理與分析 3.1 讀魔術方塊顏色到電腦 將手上的魔術方塊狀態輸入到APP以便讓APP可以運算解答並用來教學,而魔術方塊顏色的讀入,可使用Unity直接引用OpenCV或者在Android封裝時順便將OpenCV包進去。但因這部份比較繁瑣,所以本專題採用簡單的圖形偵測方式,首先,把圖片進行邊緣化偵測後會得到一個白色外框矩形,(圖2)左方是取樣魔術方塊如(圖2)右邊的其中一面,圖上9個點是取樣的像素,用來判讀其顏色,就可取得魔術方塊的四個角落,再依比例就可以得到9塊區域的中心點,在對中心點做顏色的取樣,在背景雜訊不多時效果很好。 圖2. 色彩辨識 3.2 選擇魔術方塊解法 這邊解法使用台灣人許技江老師所發明,分為8底、3邊、5邊,而最後的5呢是基於工作區特殊的加一減一依序作左上右下或者下左上右,不管做幾次6次底層一定會回復到原先樣子,有這樣特性就可以來更換最後的五角完成魔術方塊。 3.3 自動尋解與教學 本專題的魔術方塊解答方式,以實作許技江老師所發明的8355法,8355法的特點是不用死背公式而是用理解的方式來解出魔術方塊,初學者可以快速上手,且不易忘記。 |

a.上層十字 |

b.工作區 | |

|

| |

c.底層十字 |

d.五角歸位 | 圖3 8355法

| 圖4.魔術方塊轉換成2維陣列

| |

| 圖5.魔術方塊向右旋轉2維陣列結果 3.4自動尋解: (圖3)為8355法的一些情形。(圖3c)的情況可使用(圖3b)工作區來進行邊塊和角塊的對調,最後的(圖3d)使用加一減一的算法來把最後五角歸位。 接下來就是把魔術方塊上各顏色的位置作轉換,成為比較好處理的二維陣列。一個立方空盒攤開後會有六個面,而魔術方塊為一個六面的立方體,亦可以類似地將其六面數位化。(圖4)為數位化的魔術方塊,其中的0到5數值分別代表六種顏色。 在對紅色一面如(圖5)所示,進行90度左右旋轉的時候,可以知道旋轉紅色面的話則會牽動到灰色區塊一併要進行旋轉,到這邊的時候魔術方塊已經可以用來判斷哪一面哪一點的顏色了。 有了上面這些資訊,在做自動尋解的過程中,就只要先找到目標方塊在哪一面哪一點,然後把依照8355法或者其他解法,將方塊進行90度左右旋轉,把目標方塊轉至定位即可完成自動尋解這功能。 |

| |

| 圖7.小方塊組成大方塊 3.5 3D畫面呈現 在畫魔術方塊的時候我們採用Unity內建的3D矩形組合成(圖6)的這麼大的魔術方塊供需要27個3D矩形,所以只要把用先把位置弄出來,我們再依序把27顆3D矩形放入到相對應位置,再配合3.4自動尋解中所提到的二維陣列就可以畫出一顆完整的魔術方塊。 3.6動畫的呈現 如圖6所示 程式碼去呼叫IEnumerator介面函數時,會先去執行裡面的函數,當遇到yield return 0;則暫時返回呼叫它的原先程式。Start()繼續往下做其他事情,Nowplay()則會繼續執行直到沒遇到yield return 0;則結束 IEnumerator,將用這些函數來做畫面更新及延遲。 方塊旋轉 哪一面共包含哪九塊小方塊,這些在程式中已經配置好,如果我要對第0面進行旋轉,則第0面所牽動的九塊小方塊將會一併跟著旋轉,在旋轉的過程中,會呼叫旋轉函數並計算九個小方塊旋轉的角度,然後利用上面函數StartCoroutine來進行畫面的延遲及更新,將角度慢慢增加或減少,以呈現動畫。