玩 Minecraft 第一個要認識的演算法
在 Minecraft 建造長方體建築物,由於 Minecraft 區塊是正方體,所以堆疊起來是很直覺的,
但當想要畫多邊形及圓形,就得想一下了。
給小孩方格紙,限定他們只能以方格塗滿的方式(如同在 Minecraft ),請她們畫出正三角形、正方形、長的高高的三角形、正五邊形、圓形,因為小女孩想蓋的皇宮可不是正正方方的。
可以正式進入主題,
我在網路上找了些連連看的卡通圖案,對應到在方格紙中,將那些點塗在對應的方格紙的方格內,請他們連連看。當然得限制只能塗在方格上。距離短的還滿直覺,但是當距離長的時候就需要想一下。讓他們多玩玩,也不要急著告訴他們答案,試著讓他們想想有沒有什麼規則,為什麼選那個點?
就這樣隨意塗滿兩點,請小孩畫出連結這兩點的直線,讓他們想一想,
感謝我們走在許多數學大師打造的道路上。 Bresenham’s 演算法是計算兩點相連時,最接近直線的演算法,也是計算機圖學第一個演算法,其推導過程,可以視小孩的理解能力介紹。因為演算法只使用加減法,且邏輯算法上也簡單,所以很適合帶小孩與家長認識,並不是所有演算法都是這麼難懂。
關於 Bresenham’s 演算法可以參考以下的影片,另外這印度的免費線上學習平台 Unacademy,也可以參考。
[embedyt] http://www.youtube.com/watch?v=5NV7HDI4xWk[/embedyt]
也介紹另一個計算兩點最接近直線的演算法,Digital Differential Analyzer (DDA),這演算法會運用到乘除,所以若小孩也會乘除的話,可以帶著他們認識這演算法。
[embedyt] http://www.youtube.com/watch?v=g4RUfANJmTA[/embedyt]
附帶說明以上這兩個演算法都能支援畫圓,所以我把 Bresenham’s 演算法視為玩 Minecraft 第一個要認識的演算法。但也請家長們不要直接教小孩學習這演算法,有需求才會有熱誠想要學。若小孩沒需求,那就依照小孩的喜好興趣製造需求給他。
「需求」->「模仿」->「思考」->「創新」
也可以想想這兩個演算法的差異,以及在實務運用上的有何不同,還有哪些演算法也是這樣的用途呢?
而小孩在玩 Arduino 時,要用到LED點矩陣或LED字幕機時,也會用到這演算法。