2010-10-20 139 views
8

給出x,y,z旋轉矩陣的下列定義,我如何將其表示爲一個完整矩陣?只需乘以x,y,&矩陣?如何表示4x4矩陣旋轉?

X旋轉:

[1 0 0 0] 
[0 cos(-X Angle) -sin(-X Angle) 0] 
[0 sin(-X Angle) cos(-X Angle) 0] 
[0 0 0 1] 

Y旋轉:

[cos(-Y Angle) 0 sin(-Y Angle) 0] 
[0 1 0 0] 
[-sin(-Y Angle) 0 cos(-Y Angle) 0] 
[0 0 0 1] 

Z旋轉:

[cos(-Z Angle) -sin(-Z Angle) 0 0] 
[sin(-Z Angle) cos(-Z Angle) 0 0] 
[0 0 1 0] 
[0 0 0 1] 

編輯:我有一個包含一個x,y單獨旋轉類,z float值,後來我將它轉換爲矩陣以便與其他值相結合呃翻譯/尺度/旋轉。

從答案來看這裏,我可以假設,如果我這樣做:

旋轉的旋轉;旋轉.SetX(45);旋轉90°(90);旋轉180°旋轉。旋轉180°(180°)。

那麼這對於應用旋轉的順序其實非常重要?或者是否安全地假設在使用旋轉類時,您接受它們是以x,y,z順序應用的?

+0

這是回答[這裏](http://stackoverflow.com/questions/5188876/rotation-matrix-given-angle-and-point-in-x-y-z/5188904#5188904)。 – Glenn 2013-12-12 01:01:06

回答

6

是的,將這三個矩陣依次相乘將組成它們。

編輯:

您應用乘法矩陣將決定輪換將被應用到該點的訂單的訂單。

P × (X × Y × Z)  Rotations in X, Y, then Z will be performed 
P × (Y × X × Z)  Rotations in Y, X, then Z will be performed 
P × (Z × X × Y)  Rotations in Z, X, then Y will be performed 
+1

請注意,它可能是也可能不是你期望的旋轉(記住比在3D中,旋轉不會通過) – user168715 2010-10-20 21:26:49

+0

但請注意組成的順序很重要 - 矩陣乘法不是可交換的,也不是旋轉不同的軸。 – walkytalky 2010-10-20 21:29:28

+0

首先,決定應用旋轉的順序(如X然後Y然後Z)。然後,它也取決於您的點是行向量還是列向量的慣例。對於行向量,您有'((r * X)* Y)* Z = r *(XYZ)' - 與列向量,您有'Z *(Y *(X * C))=(ZYX) * c'。 – comingstorm 2010-10-20 23:29:20

2

它實際上是非常重要的,你申請什麼樣的順序在旋轉。

你想要的順序取決於你想要的旋轉做什麼。例如,如果您正在爲飛機建模,您可能需要首先進行滾動(沿着身體的長軸旋轉),然後是俯仰(沿另一個水平軸旋轉),然後是朝向(沿着垂直軸旋轉)。這是因爲,如果您先標題,那麼飛機將不再沿着其他軸對齊。除此之外,您需要處理您的約定:這些軸對應於X,Y和Z中的哪一個?

通常,您只想爲特定應用程序選擇特定的旋轉訂單。定義一個通用的「XYZrotation」對象沒有什麼意義;通常情況下,您將擁有一般轉換(即可以是任何旋轉,翻譯等級的矩陣)以及獲取它們的各種方式(例如,rotX,rotY,translate,scale ...)以及應用程序的能力他們以特定的順序(通過矩陣乘法)。

如果你想要的東西只能代表旋轉而沒有別的東西,你可能會考慮四元數(作爲anand建議)。但是,您仍然需要決定執行旋轉的順序,並且再次,硬連線所需的順序也沒有意義。