找到一个角度theta的代码
问题描述:
所以我有3个3D向量,W,T1和T2满足W = T1 *cosθ+ T2 *sinθ的关系。找到一个角度theta的代码
我需要想出一个算法,可以找到给定这3个向量的theta。然而,我卡住了,甚至不知道从哪里开始。
答
使用线性代数的技巧来解决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
的实际值。
请注意,我没有在这些步骤中检查我的工作,所以我不对任何方程的准确性作任何保证。我把它作为你的锻炼。
答
如果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)
Just to che ck:T1和T2之间没有关于角度的先前信息? (比如“他们总是正交的”) – maxim1000 2013-03-13 08:25:03