摘要: 處理變換是一件非常令人頭疼的事,矩陣更是棘手。如果你曾經編寫過關于矩陣的代碼并且沒有用設計良好的類,你會發現經常要處理負號、轉置矩陣或翻轉連接順序以使其能正常工作。
下面這幾個類正是為了消除在編程中經常遇到的這類問題而設計的。例如,很少需要直接訪問矩陣或四元數中的元素,因此特意限制了可用操作的數目以避免產生迷惑,再如,對cRotationMatrix類,沒有求逆和連接操作,因為如果按其本身的目的使用cRotationMatrix,這些操作是不應該出現或沒有意義的。
閱讀全文
摘要: cRotationMatrix就其特殊目的來說是稱職的,但也正因為如此,它的廣泛應用受到了限制。cMatrix4x3類是一個更加一般化的矩陣,它被用來處理更加復雜的變換。這個矩陣類保存了一個一般仿射變換矩陣。旋轉、縮放、鏡像、投影和平移變換它都支持,該矩陣還能求逆和組合。
因此,cMatrix4x3類的語義和cRotationMatrix類完全不同。cRotationMatrix僅應用于特殊的物體空間和慣性空間,而cMatrix4x3有更一般的應用,所以我們使用更一般化的術語"源"和"目標"坐標空間。和cRotationMatrix不一樣,它的變換方向是在矩陣創建時指定的,之后點只能向那個方向(源到目標)變換。如果要向相反的方向變換,須先計算逆矩陣。
閱讀全文
摘要: cRotationMatrix類的目的就是處理非常特殊的(也是極其常用的)物體和慣性坐標空間之間的旋轉。這個矩陣類不是一般的變換類,我們假定這個類只包含旋轉,因此,它是正交的。換句話說,該矩陣表達的是方位,而不是角位移。當你創建這樣的矩陣時,不必指定變換的方向(物體坐標空間到慣性坐標空間或是慣性坐標空間到物體坐標空間)。變換的方向在實際執行變換時指定,每個方向對應一個函數。
閱讀全文
摘要: cQuaternion類用來以四元數形式保存方位或角位移,在能應用到四元數上的完整數學運算集合中,只有那些對單位四元數有意義的運算才對保存角位移有用,這里沒有提供四元數的求負、加減、標量乘、對數操作。
閱讀全文
留下一個人和一盞燈
讓黑夜躲在窗外
寒冷的盡頭是一壺酒
溫暖我唯一的夢
許多生命里走過的風雨
并非每個人都懂
就當我和你從不曾有過
如此短暫的相遇
化身沒有愛也沒有恨的海
洗凈憂傷的塵埃
眼中的遺憾和心底的傷感
總有停泊的港灣
不是我能夠負擔
摘要: 處理變換是一件非常令人頭疼的事,矩陣更是棘手。如果你曾經編寫過關于矩陣的代碼并且沒有用設計良好的類,你會發現經常要處理負號、轉置矩陣或翻轉連接順序以使其能正常工作。
下面這幾個類正是為了消除在編程中經常遇到的這類問題而設計的。例如,很少需要直接訪問矩陣或四元數中的元素,因此特意限制了可用操作的數目以避免產生迷惑,再如,對cRotationMatrix類,沒有求逆和連接操作,因為如果按其本身的目的使用cRotationMatrix,這些操作是不應該出現或沒有意義的。
閱讀全文
唉,游戲這東西。
摘要: 直觀地說,我們知道物體的“方位”主要描述的是物體的朝向。然而“方向”和“方位”并不完全一樣。向量有“方向”但沒有“方位”,區別在于,當一個向量指向特定方向時,可以讓向量自轉(如圖10.1所示),但向量(或者說它的方向)卻不會有任何變化,因為向量的屬性只有“大小”,而沒有“厚度”和“寬度”。
閱讀全文
摘要: 為了將角位移從歐拉角轉換到四元數,可以使用從歐拉角構造矩陣類似的方法。先將這三個旋轉分別轉換為四元數,這是一個簡單的運算。再將這三個四元數連接成一個四元數。和矩陣一樣,有兩種情況需要考慮,第一種是慣性 -- 物體四元數,第二種是物體-- 慣性四元數。因為它們互為共軛關系,所以我們只推導慣性--物體四元數。
閱讀全文
摘要: 為了將角位移從四元數轉換到矩陣形式,可以利用旋轉矩陣,它能計算繞任意軸的旋轉:
這個矩陣是用n和θ表示的,但四元數的分量是:
w = cos(θ/2)
x = nx sin(θ/2)
y = ny sin(θ/2)
z = nz sin(θ/2)
閱讀全文