2013-03-13 340 views
0

我在寫一個C#程序,它有一個立方體對象,允許用戶在X軸和Z軸上移動它。不過,我希望他們能夠旋轉它。C#旋轉矩陣

我矩陣的定義是這樣:public double[, ] matrix = new double[4, 4];

因此,例如,我能夠通過這個代碼來縮放立方體。

public void initAsScalingMatrix(double sx, double sy, double sz) { 

initAsIdentityMatrix(); 
matrix[0, 0] = sx; // scale x 
matrix[1, 1] = sy; // scale y 
matrix[2, 2] = sz; // scale z 
matrix[3, 3] = 1; 
} 

所以我的問題是。我怎樣才能使用相同的方法繞着例如x軸旋轉立方體?

編輯---

嗨,

我想通了如何旋轉它,但它是從在左上角的方式這樣做。

matrix[0, 0] = Math.Cos(rz); 
matrix[0, 1] = Math.Sin(rz); 
matrix[1, 0] = -(Math.Sin(rz)); 
matrix[1, 1] = Math.Cos(rz); 

它怎麼會從中心旋轉?

+0

也許它只是我,但我不明白你的代碼是如何工作的。請解釋一下,矩陣中的數字意味着什麼。 – Ari 2013-03-13 09:51:10

+0

要使它從中心旋轉,首先需要對其進行翻譯以便場景的中心位於原點,然後應用旋轉矩陣,然後將場景翻譯回其原始位置。 – antonijn 2013-03-13 09:59:29

回答

1

您需要將旋轉矩陣乘以一個平移矩陣以得到一個矩陣,該矩陣將圍繞非原點位置旋轉對象。

這有點拗口這樣看着它這樣可能會有所幫助:

首先應用平移矩陣,以您的多維數據集移動立方體的中心(或旋轉原點)到世界原點(0, 0)。現在應用你的旋轉矩陣。現在應用相反的翻譯將立方體放回到原始位置。當然,現在它將被旋轉並放入原來的「位置」,這就是你想要的。

有效地做的是將一個矩陣(Trans x Rotation x^Trans)應用到該立方體。

你的旋轉矩陣是2D的。如果你想旋轉任意3D軸,你需要使用3D旋轉矩陣。如果您爲C#安裝XNA框架,您將免費獲得一個矩陣數學庫。 XNA應該是用於遊戲,但根據你在做什麼,你可能會發現它用於矩陣數學而不是滾動你自己。