2011-03-02 117 views
1

我有一個參考模型(例如一個三角形),其'向上'向量定義爲< 0 1 0>,其'向上'向量定義爲< 1 0 0>。在3d中檢測對象的旋轉

現在我有另一個相同大小的三角形在三維空間中任意旋轉和定位。我想要做的是找出這個新的三角形的「向上」和「向上」向量。即如果三角形圍繞X軸旋轉了180度,則它的「向上」向量應該是< 0 -1 0>,並且其「向上」向量應該是相同的。

如何找到旋轉變換?如果我有這個,我可以通過逆向旋轉'向上'向量來獲得新的'向上'向量,然後完成。

任何想法?

回答

0

大家好。感謝您的幫助,但我設法弄清楚了。

以下是這些步驟。

  1. 中心在原點

  2. 旋轉一個矢量到另一個這兩個對象,對於examble(A0) - >(B0)。現在你必須讓矢量相互重疊。a0/b0,儘管是點,形成從起源的向量

  3. 找到每個這些向量的法線,這可以通過在每個座標空間中使用一個附加點並找到交叉乘積來完成。例如:

    的A0 = A1 X萬億 B0 = B1 X

  4. 現在只需旋轉的上億,你就完成了。

做旋轉最簡單的方法是添加一個'rotateTo'成員函數返回一個四元數(避免萬向節鎖)。然後,可以將兩個四元數相乘以得到最終的旋轉變換。

1

爲此,您需要與構成三角形的矢量垂直的矢量。可以使用叉積計算它:

http://en.wikipedia.org/wiki/Cross_product

所以給定的點A組成的三角形,B,C你計算2個載體B-A和C-A的橫產物。然後可以通過旋轉垂直向量來旋轉三角形以適合參考三角形。

這是您搜索的內容嗎?如果沒有請評論,我會考慮更多。

+0

如果我的模型有4個或更多點,這個工作嗎?我如何確定哪些面用於形成交叉產品?我如何「旋轉垂直向量」? – 2011-03-02 22:05:38

0

必須在另一個答案中回答您的評論,因爲我想添加圖形。

如果你的模型有4個以上的點,但是是一個剛體那麼取任意3個不相同的點得到垂直向量就足夠了(然後把你想要的對象上的3個對應點旋轉到)。通過計算它們之間的角度,將一個垂直矢量旋轉到另一個垂直矢量,這必須針對3軸單獨完成。我將演示它如何計算圍繞z軸旋轉的角度。所以在下圖中,粗體紅色和藍色箭頭是原始的三維向量。

Graphic 1

項目他們對自己的z值只設置爲0 xy平面您可以通過使用他們的點積,規範和餘弦弓如下面的計算它們之間的夾角公式從http://en.wikipedia.org/wiki/Dot_product。 theta現在是你必須圍繞z軸旋轉的角度。對x軸和y軸做同樣的事情,你有你的旋轉角度。

Graphic 2

+0

我不相信這會處理萬向節鎖。 – 2011-03-08 16:26:08