2013-03-13 38 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)