Math 如何计算两个标准化向量与上方向之间的角度?

Math 如何计算两个标准化向量与上方向之间的角度?,math,vector,algebra,Math,Vector,Algebra,向下看另一个向量的轴时,如何计算向量相对于“向上”方向的角度?为了说明我的问题,我画了两张图: 在此图像中,您可以看到常规设置。绿色箭头为Y轴(向上为正,向下为负),红色箭头为X轴(左为负,右为正),蓝色箭头为Z轴(朝向屏幕为正,远离屏幕为负) 青色和黄色箭头表示以0,0,0为中心的两个规范化向量(长度=1)。向量可以在3D空间的任何地方,我只是用这个作为例子-唯一可以保证的是它们的长度永远是1,向上的方向永远是向量(0,1,0) 这就是我想弄明白的。我已经确定了摄像头的方向,使其直接指向青

向下看另一个向量的轴时,如何计算向量相对于“向上”方向的角度?为了说明我的问题,我画了两张图:

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

青色和黄色箭头表示以0,0,0为中心的两个规范化向量(长度=1)。向量可以在3D空间的任何地方,我只是用这个作为例子-唯一可以保证的是它们的长度永远是1,向上的方向永远是向量(0,1,0)

这就是我想弄明白的。我已经确定了摄像头的方向,使其直接指向青色箭头。我试图计算黄色箭头和绿色(Y)轴之间的角度,同时向下看青色箭头指定的线

我自己研究这个问题有困难,可能是因为我缺乏足够的词汇来定义我的问题(因此图表)。似乎可以确定青色箭头和已知轴之间的旋转,然后围绕原点旋转所有东西(包括黄色箭头),此时只需使用atan2()根据黄色向量的两个坐标确定角度(忽略深度分量),但我猜可能有一种更简单的方法。如果有的话,那可能是什么?

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

如果将这些向量表示为组件(即(v1、v2、v3)),则很容易计算它们的点积和各自的长度。然后cos a=v.w/(|v |.| w |),取其中的arcos

计算出一个旋转到另一个旋转是很困难的


这类似于包括和在内的各种问题,但我认为它们让问题听起来比实际情况更复杂

谢谢你的回复,虽然我不确定我是否理解。技术上有三个向量,每个向量都有三个分量(X、Y和Z,因为它们存在于三维空间中)。前两个向量可以是任意位置,但从原点到向量指定的点的长度始终为1。第三个向量是向上方向,始终为0、1、0(指向Y轴上)。我不需要每次计算两个输入向量之间的角度。我需要计算上方向(Y轴)和第二个向量之间的角度,同时向下看第一个向量的轴到原点。(续)这可能就是我迷路的地方——我在互联网上找到的一切都是关于找到两个向量之间的角度,但我不认为这就是我要寻找的。你提到的第二个问题似乎是关于二维向量,而不是三维向量,尽管我最初的想法基本上是试图将问题转化为二维空间。啊,我明白你的意思了——我确实误解了你。当投影到垂直于第三个向量(青色向量)的平面上时,您正在查找两个向量(黄色向量和绿色Y轴)之间的角度。这恐怕比我现在要说的要复杂得多,但这些词汇可能会帮助你开始寻找解决方案。这是正确的,但投影平面需要定向,以便Y轴与绿色箭头对齐。