如何计算两个归一化向量和向上方向之间的角度?

时间:2015-06-11 07:56:39

标签: math vector algebra

如何在向下看另一个向量的轴的同时计算向量的角度与“向上”的方向?为了说明我在问什么,我画了两张图:

http://i.imgur.com/0JUb8uA.jpg

在此图像中,您可以看到常规设置。绿色箭头是Y轴(向上是正,向下是负),红色箭头是X轴(左边是负,右边是正),蓝色箭头是Z轴(朝向屏幕是正的,离开是消极的。)

青色和黄色箭头表示以0,0,0为中心的两个归一化向量(长度= 1)。向量可以在3D空间中的任何位置,我只是以此为例 - 唯一保证的是它们的长度始终为1,向上方向始终为Vector(0,1,0)。

http://i.imgur.com/rdlEesZ.jpg

这就是我想弄清楚的。我将相机定向为直接指向青色箭头。我正在尝试计算黄色箭头和绿色(Y)轴之间的角度,同时向下看青色箭头指定的线。

我自己研究这个问题可能是因为我缺乏充分定义我的问题的词汇(因此图表)。似乎可以确定青色箭头和已知轴之间的旋转,然后围绕原点旋转所有内容(包括黄色箭头),此时只需使用atan2()来确定角度在黄色矢量的两个坐标上(忽略深度成分),但我猜测可能有一种更简单的做事方式。可能是什么,如果有的话?

1 个答案:

答案 0 :(得分:2)

如果您有两个向量 v =(v1,v2,v3) w =(w1,w2,w3),那么它们的点积为 vw = v1.w1 + v2.w2 + v3.w3 。但是,他们的点积的另一个表达式是 v.w = | v | | W | cos a ,其中 | v | | w | 是两个向量的长度, a 是两者之间的角度它们。

如果您将这些向量表示为组件(即(v1,v2,v3)),则可以轻松计算其点积和各自的长度。然后 cos a = v.w /(| v |。| w |),并采用它的arccos。

进行旋转,将一个旋转到另一个是 hard 这样做的方法。

这类似于包括12在内的各种问题,但我认为它们听起来比现在更复杂。