下載C++實(shí)現(xiàn)程序
3D中的方位和角位移的C++實(shí)現(xiàn)(4) 摘要: cRotationMatrix就其特殊目的來(lái)說(shuō)是稱職的,但也正因?yàn)槿绱耍膹V泛應(yīng)用受到了限制。cMatrix4x3類是一個(gè)更加一般化的矩陣,它被用來(lái)處理更加復(fù)雜的變換。這個(gè)矩陣類保存了一個(gè)一般仿射變換矩陣。旋轉(zhuǎn)、縮放、鏡像、投影和平移變換它都支持,該矩陣還能求逆和組合。
因此,cMatrix4x3類的語(yǔ)義和cRotationMatrix類完全不同。cRotationMatrix僅應(yīng)用于特殊的物體空間和慣性空間,而cMatrix4x3有更一般的應(yīng)用,所以我們使用更一般化的術(shù)語(yǔ)"源"和"目標(biāo)"坐標(biāo)空間。和cRotationMatrix不一樣,它的變換方向是在矩陣創(chuàng)建時(shí)指定的,之后點(diǎn)只能向那個(gè)方向(源到目標(biāo))變換。如果要向相反的方向變換,須先計(jì)算逆矩陣。
3D中的方位和角位移的C++實(shí)現(xiàn)(3) 摘要: cRotationMatrix類的目的就是處理非常特殊的(也是極其常用的)物體和慣性坐標(biāo)空間之間的旋轉(zhuǎn)。這個(gè)矩陣類不是一般的變換類,我們假定這個(gè)類只包含旋轉(zhuǎn),因此,它是正交的。換句話說(shuō),該矩陣表達(dá)的是方位,而不是角位移。當(dāng)你創(chuàng)建這樣的矩陣時(shí),不必指定變換的方向(物體坐標(biāo)空間到慣性坐標(biāo)空間或是慣性坐標(biāo)空間到物體坐標(biāo)空間)。變換的方向在實(shí)際執(zhí)行變換時(shí)指定,每個(gè)方向?qū)?yīng)一個(gè)函數(shù)。
3D中的方位和角位移的C++實(shí)現(xiàn)(2) 摘要: cQuaternion類用來(lái)以四元數(shù)形式保存方位或角位移,在能應(yīng)用到四元數(shù)上的完整數(shù)學(xué)運(yùn)算集合中,只有那些對(duì)單位四元數(shù)有意義的運(yùn)算才對(duì)保存角位移有用,這里沒(méi)有提供四元數(shù)的求負(fù)、加減、標(biāo)量乘、對(duì)數(shù)操作。
3D中的方位和角位移的C++實(shí)現(xiàn)(1) 摘要:
處理變換是一件非常令人頭疼的事,矩陣更是棘手。如果你曾經(jīng)編寫(xiě)過(guò)關(guān)于矩陣的代碼并且沒(méi)有用設(shè)計(jì)良好的類,你會(huì)發(fā)現(xiàn)經(jīng)常要處理負(fù)號(hào)、轉(zhuǎn)置矩陣或翻轉(zhuǎn)連接順序以使其能正常工作。
下面這幾個(gè)類正是為了消除在編程中經(jīng)常遇到的這類問(wèn)題而設(shè)計(jì)的。例如,很少需要直接訪問(wèn)矩陣或四元數(shù)中的元素,因此特意限制了可用操作的數(shù)目以避免產(chǎn)生迷惑,再如,對(duì)cRotationMatrix類,沒(méi)有求逆和連接操作,因?yàn)槿绻雌浔旧淼哪康氖褂胏RotationMatrix,這些操作是不應(yīng)該出現(xiàn)或沒(méi)有意義的。