2014-10-02 91 views
1

我有兩個面向任意方向的三角形。我有兩個三角形的向前矢量,我想對齊每個正向矢量以面對相同的方向。我只能夠對世界x,y和z軸進行旋轉(我使用的軟件API非常有限)。給定一個旋轉矩陣找到頂點的新位置

因此,設A =第一個三角形的前向矢量,B =第二個三角形的前向矢量。 我可以用這個公式計算,以找到旋轉矩陣:

v = B X A 
s = ||v|| 
c = A dot B 

vx = skew-symmetric cross-product matrix of v 

R = I + [vx] + [vx]^2 * (1-c)/s^2 

我能找到R.

我不知道怎麼用[R,這樣我可以移動三角乙這樣的頂點三角形B和三角形A面向相同的方向。

圖片僅供參考:

enter image description here

謝謝大家提前幫助。

回答

1

可以使用歸一化的向量v作爲軸線A和B之間的角度τ來計算旋轉矩陣(右 - 手指則):

| cosT + x*x*(1 - cosT)  y*x*(1 - cosT) + z*sinT z*x*(1 - cosT) - y*sinT | 
| x*y*(1 - cosT) - z*sinT cosT + y*y*(1 - cosT)  z*y*(1 - cosT) + x*sinT | 
| x*z*(1 - cosT) + y*sinT y*z*(1 - cosT) - x*sinT cosT + z*z*(1 - cosT) | 

x,y,z值是指標準化的v座標。現在

,應用此矩陣來計算每個頂點B.

PS:這個矩陣是列優先的順序,你可能要調換它。

+0

我忘了提到最後一件事(我用它更新了帖子)。我只有能力做世界旋轉(只有x,y,z軸)。我無法在矢量上應用旋轉。我使用的軟件非常有限。 – user2970916 2014-10-03 12:45:10

+0

實際上這個矩陣是x,y和z軸旋轉的組合(不一定按照這個順序)。 – eap 2014-10-03 15:28:05

0

您可以通過計算角度between to forward vectors第一更容易做到這一點:

theta = arccos(dot(A, B)/(length(A)*length(B))) 

這給你的,你想旋轉你的三角形的角度。然後就可以把該角度在2D rotation matrix並用它來計算每個頂點的新位置:

vector2 newPos = R*oldPos, Where R is the rotation matrix 
+0

這會工作,假設我在一個2D平面。我也必須考慮到Z方向。 – user2970916 2014-10-02 16:56:43