2013-04-06 1559 views

回答

0

检查this了。 (谷歌是件好事)

这将计算两个向量之间的角度。 如果向量A是(AX,AY,AZ)和
矢量B是(BX,BY,BZ),然后

它们之间角度的cos为:

     (ax*bx + ay*by + az*bz) 
    -------------------------------------------------------- 
    sqrt(ax*ax + ay*ay + az*az) * sqrt(bx*bx + by*by + bz*bz) 

为了计算角度投影到xy平面上的两个矢量之间,只需忽略z坐标。

角的余弦在x-y平面=

   (ax*bx + ay*by) 
    -------------------------------------- 
    sqrt(ax*ax + ay*ay) * sqrt(bx*bx + by*by 

同样,计算在x-z平面的两个向量的投影之间的角度,忽略的y坐标。

+0

得到一个角度。我不知道这是什么意思?我想要在x,y旋转上的角度,它会使我从0,0,-1到0.559055,0.503937,0.653543。我从中获得了一个角度,我该怎么处理它? – 2013-04-06 21:30:07

+0

这会计算角度,你用它来做什么取决于你...你计算的是什么?你想把这个角度分成两个部分吗? – 2013-04-06 21:35:35

+0

这并不能告诉我如何从3D中获得0,0,-1到0.559055,0.503937,0.653543(3个角度)。它接近130度,但不是在X,Y和Z轴上旋转。 – 2013-04-06 21:35:52

0

这听起来像你想从笛卡尔坐标(X,Y,Z)到球面坐标(RHO,θ,PSI)转换。

因为它们都是单位向量,所以rho的半径将为1.这意味着您的大小也将为1,您可以跳过整个分母并仅使用点积。

在X/Y平面(绕Z轴)旋转将是你的第一个例子很困难的(0,0,-1),因为它在X或Y没有扩展名所以没有什么旋转。 (0,0,-1)与(1,0,0)或(0,1,0)成90度。如果取x轴成为2θ位置的0角,则通过在施加逆余弦计算(旋转关闭X/Y平面的)(X,Y,Z)和( x,y,0),然后你可以跳过点积,并用atan2(y,x)得到theta(x/y旋转)。

当心gimbal lock这可能引起问题。