Math 如何在3D中计算具有给定轴法线的2个向量之间的有符号角度?

Math 如何在3D中计算具有给定轴法线的2个向量之间的有符号角度?,math,vector,angle,quaternions,Math,Vector,Angle,Quaternions,假设我有两个向量,A和B,以及一个轴(标准化向量),我如何找到A和B之间的角度,使得旋转后A(轴,角度)和B wrt到给定轴之间的角度差为0。旋转后A不必等于B。基本上,我想找出A和B在特定平面上的角度差 注:这不同于在两个向量之间寻找最短角度,因为轴不是A和B之间的叉积。因此,该技术(以及许多答案)不适用。这需要在3D中工作。我认为这个问题没有解决方案,除非a和B都是相同的长度,a和B都与轴形成相同的角度(通常是向量之间的最短角度)。我假设这些都是给定的 在这种情况下,一种解决方案是计算A和B

假设我有两个向量,A和B,以及一个轴(标准化向量),我如何找到A和B之间的角度,使得旋转后A(轴,角度)和B wrt到给定轴之间的角度差为0。旋转后A不必等于B。基本上,我想找出A和B在特定平面上的角度差


注:这不同于在两个向量之间寻找最短角度,因为轴不是A和B之间的叉积。因此,该技术(以及许多答案)不适用。这需要在3D中工作。

我认为这个问题没有解决方案,除非a和B都是相同的长度,a和B都与轴形成相同的角度(通常是向量之间的最短角度)。我假设这些都是给定的

在这种情况下,一种解决方案是计算A和B在与轴正交的平面上的正交投影。这可以通过减去轴方向上的分量来实现。所以,如果我有一个轴方向的单位向量,称之为X,计算结果会是

Aproj = A - dot(A, X)X
Bproj = B - dot(B, X)X
然后,
Aproj
Bproj
之间的角度(通常意义上的最短角度)是围绕您所询问的轴旋转的角度


我不确定这是否是计算它的最简单的方法,但它应该可以非常普遍地工作。

点积给出A和B之间的角度。 在Fortran语言中,类似于:dotAB=DASIN(DOT(A/| A |,B/| B |))

叉积给出了A和B的向量正交


当乘以角度DotAB时,xp乘积向量向平面(或轴)的投影应该可以到达该点。你的回答可能是正弦或余弦。

读了你的答案后,我意识到我的问题措辞不正确。我应该说旋转后A(轴,角度)和B wrt到给定轴的角度差是0。基本上,我想找出A和B在特定平面上的角度差。我希望这一点现在已经清楚了。如果我正确理解了你的问题,答案仍然是一样的。将向量投影到平面中。然后计算投影向量之间的角度。我投票结束这个问题,因为它是关于几何/而不是编程或软件开发。我想计算机物理和计算机图形学不是编程或软件开发,对吗?像这样的东西:离题太对了吗?