在了解了矩陣的基礎知識之後我們就可以開始學習矩陣相關的應用實例了,當然這裡並不是說矩陣的知識就這麼點,相反還特別多,而實例的作用也是為了讓我們更全面的了解和學習矩陣。

那麼今天學習的實例最主要的核心就是 2D 旋轉矩陣,之所以從這個開始,也是對應著由淺入深的原則,太難的話我也不會。好了,我們先來看 2D 旋轉矩陣是個什麼東西。

看完上圖小夥伴們應該知道了旋轉矩陣長啥樣子了,不過這裡需要提醒一點的就是,圖中的 a 角度需要換算成弧度值才能進行三角函數運算的,而不是直接帶入角度就去求解的。那麼 2D 旋轉矩陣先介紹到這,具體的使用方式後面再細說。

了解了實例的主要知識點,那麼我們具體的實例到底需要做什麼呢,來看下最終實例的效果圖。

沒錯,我們需要做的就是在一個窗體程序中繪製三角形,然後讓三角形進行旋轉就行了。

話不多說,我們首先通過 visual studio 創建我們的窗體程序,我們需要以窗體作為載體來繪製我們的三角形(具體的窗體程序創建步驟就不詳細介紹了),然後我們接著創建一個三角形的類,以下是基本代碼。

上圖的代碼中介紹了三角形的構建過程,代碼都有注釋也就不贅述了。在創建完三角形類之後,我們需要考慮的是三角形繪製在窗體的哪個位置比較好,由此就有了下面這張示意圖。

使用 C# 構建的窗體應用程序,就平面的坐標分布而言,左上角就是整個窗體的原點,窗體是 600 x 600 的,所以要想要將我們的三角形放置在上圖中的位置,首要一點就是將窗體應用默認的原點進行重新的設置。

如上就是在窗體開始繪製的時候將原點的位置進行了重新設置,再開始繪製三角形。不過在繪製三角形之前,需要先初始化三角形的相關屬性,也就是三角形類中需要的三個點以及三條邊,這裡呢採取窗體應用在載入的時候進行三角形的初始化。

看到這可能有小夥伴不是很理解這些斷斷續續的代碼有啥聯繫,這樣說吧,我們需要在一個窗體應用上繪製我們的三角形,首要的就是三角形的相關屬性初始化,而初始化的位置就是在窗體載入的時候,這裡的載入方法在創建的窗體類中是有的。在初始化了三角形之後就可以繪製了,所以在窗體程序繪製的方法中進行三角形的繪製,而繪製之前就需要將窗體默認原點重置,最後我們才能看到如下的效果圖。

三角形是繪製出來了,可如何將窗體中的三角形進行旋轉呢,別急我們先豐富三角形類的內容,添加旋轉的方法,也就是如下這樣的。

看著上面的代碼會不會有點看不太懂,沒關係,之前我們只是簡單介紹了下 2D 旋轉矩陣,但具體的使用並沒有詳細說明,那這裡呢我們可以看下面這個說明估計能理解了。

我們通過 2D 旋轉矩陣計算出三角形旋轉後頂點的三個新坐標,再將其繪製成三角形,這樣三角形也就能夠旋轉了。

我們來看下三角形類最後的代碼結構。

既然三角形已經有了旋轉的方法,那麼我們該如何傳入角度呢。這裡又需要用到窗體程序中的計時器 timer 組件。在窗體程序中添加計時器的方法,這個方法是不斷執行的,具體執行的間隔可以在窗體設計屬性中進行修改,這裡就不展示了。

添加完我們的計時器,在不斷提供角度給三角形進行旋轉操作之後,我們的三角形終於是開始旋轉了。

最後我們看下關於窗體應用主體類:

至此實例的實現細節基本上就介紹完了,文章涉及的諸多關於窗體的方法可以自行搜索相關資料學習,畢竟這不是學習的重點。由上我們已經學習了如何通過 2D 旋轉矩陣進行 2D 圖形的旋轉,那麼之後我們再去學習更加多樣好玩的矩陣。


推薦閱讀:
相关文章