2013-03-13 69 views
0

所以我有3個3D向量,W,T1和T2滿足W = T1 *cosθ+ T2 *sinθ的關係。找到一個角度theta的代碼

我需要想出一個算法,可以找到給定這3個向量的theta。然而,我卡住了,甚至不知道從哪裏開始。

+0

Just to che ck:T1和T2之間沒有關於角度的先前信息? (比如「他們總是正交的」) – maxim1000 2013-03-13 08:25:03

回答

0

使用線性代數的技巧來解決cos(theta)和sin(theta)的可能性。

[ T1_1 | T2_1 | W_1 ] 
[ T1_2 | T2_2 | W_2 ] 

[ 1  | T2_1/T1_1 | W_1/T1_1 ] 
[ T1_2 | T2_2   | W2   ] 

[ 1  | T2_1/T1_1    | W_1/T1_1    ] 
[ 0  | T2_2 - T1_2 * T2_1/T1_1 | W2 - T1_2 * W_1/T1_1 ] 

[ 1  | T2_1/T1_1    | W_1/T1_1            ] 
[ 0  | 1       | (W2 - T1_2 * W_1/T1_1)/(T2_2 - T1_2 * T2_1/T1_1) ] 

[ 1  | 0       | W_1/T1_1 - T2_1/T1_1 * (W2 - T1_2 * W_1/T1_1)/(T2_2 - T1_2 * T2_1/T1_1)    ] 
[ 0  | 1       | (W2 - T1_2 * W_1/T1_1)/(T2_2 - T1_2 * T2_1/T1_1)           ] 

所以,

cos(theta) = alpha * W_1/T1_1 - T2_1/T1_1 * (W2 - T1_2 * W_1/T1_1)/(T2_2 - T1_2 * T2_1/T1_1) 
sin(theta) = alpha * (W2 - T1_2 * W_1/T1_1)/(T2_2 - T1_2 * T2_1/T1_1) 

我們知道,

cos(theta)^2 + sin(theta)^2 = 1 

堵前面的方程cos(theta)sin(theta)成最後一個等式,我們可以解決alpha。知道這一點,我們可以使用反餘弦或反正弦來計算theta的實際值。


請注意,我沒有在這些步驟中檢查我的工作,所以我不對任何方程的準確性作任何保證。我把它作爲你的鍛鍊。

1

如果T1和T2是不共線,則可以使用叉積:

  • W = T1 * COS(THETA)+ T2 * SIN(THETA)
  • [W,T1] = [T2中,T1] * SIN(THETA)
  • [W,T2] = [T1,T2] * COS(THETA)

如果它們是共線的,只是突出他們位於一行,並且解決標量方程A=B*cos(theta)+C*sin(theta)