2015-10-04 66 views
0

我很抱歉問這個問題,因爲我知道它已被問及答覆很多次。我幾乎花了幾個小時學習了3d和涉及的數學。vector3d周圍旋轉vector3d

我有兩個vector3ds。 A是(0,0,0),B是(0,0,-500)。我想圍繞A旋轉B一定的程度。

有人可以提供一個新手的答案?我所看到的解決方案都是我試圖學習但尚未理解的領域。

+0

你不能周圍的任何東西旋轉而不指定_center ** rotation_ – Alnitak

+0

中心點的點**是向量A,我想向量B旋轉圍繞A一個特定的角度,同時保持它與矢量A的距離。對不起,如果這不是我的問題清楚。 –

+0

這還不清楚 - 旋轉需要兩件事 - 旋轉中心_和旋轉_軸_。你的'A'儘管你已經將它描述爲一個矢量,實際上它就是_center point_,並且它是原點的事實簡化了數學運算,因爲你不需要多步變換或4x4同質座標。但是,您仍然需要提供rotation_的_axis。請參閱https://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions – Alnitak

回答

1

在評論中,你已經闡明瞭你只是想旋轉Y軸。這實際上只是一個2D旋轉,X和Z座標變化,但Y座標不變。

因此:

x' = x cos(theta) + z sin(theta) 
z' = -x sin(theta) + z cos(theta) 

this SIGGRAPH link

+0

謝謝Alnitak,你的毅力令人欽佩。 45年大學畢業後,我的數學技能急劇萎縮。上面的回答至少讓我看起來很熟悉,但我在某處弄糟了某些東西。 'code' farpoint.X = farpoint.X * cos(heading)+ farpoint.Z * sin(heading) farpoint.Z = -farpoint.X * sin(heading)+ farpoint.Z * sin(heading)'code'我翻譯你的例子吧。感覺現在很無知...... –

+0

@BillMartini你必須在臨時變量中存儲新的X和Z座標,否則'farPoint.X'的新值將在第二次計算中被錯誤地使用,而不是原來的值。另外,不要忘記,計算機的數學函數幾乎肯定會使用弧度而不是度數。 – Alnitak

+0

好吧,這是有道理的,可能應該抓住了。我的頭仍然從這些矩陣公式旋轉。是的,上面的行將標題乘以常數轉換爲弧度。我剛剛開始玩OpenGL,並且能夠在短時間內大量修改啓動器示例,但我很快發現我的數學能力是一個表現障礙。感謝您的幫助。 –