2016-07-20 47 views
-1

假设如果我有两个向量A和B以及一个轴(归一化向量),我如何找到A和B之间的角度,使得旋转后的A(轴,角)和B之间的角度差与给定的轴是0.在旋转之后,A不必等于B.基本上我想找到A和B在指定平面上的角度差。如何计算3D矢量与给定轴正常的2个矢量之间的符号夹角?

注意:这与找到2个向量之间的最短角度不同,因为轴不是A和B之间的叉积。因此,技术here(和许多SO答案)不适用。这需要在3D中工作。

+6

由于是关于几何/ [math.se]而不是编程或软件开发,因此我正在投票关闭题目以作为题外话题。 – Pang

+0

w/e我猜计算机物理和计算机图形学不是编程或软件开发的权利?这样的东西:http://stackoverflow.com/questions/11022446/direction-of-shortest-rotation-between-two-vectors是offtopic太正确? – user80667

回答

0

我不认为这个问题有解决方案,除非A和B长度相同,而A和B两者都与轴形成相同的角度(通常意义上为矢量之间的最短角度)。我会认为这些是给出的。

在这种情况下,一种解决方案是计算A和B正交投影到与轴正交的平面中。这可以通过减去轴方向上的组件来完成。所以,如果我在轴线的方向上具有单位矢量,并称之为X,计算将像

Aproj = A - dot(A, X)X 
Bproj = B - dot(B, X)X 

然后AprojBproj之间的角度(在最短的角度的通常意义上)是角围绕你所问的轴线旋转。

我不确定这是否是最简单的计算方法,但它应该工作得相当普遍。

+0

读你的答案让我意识到我错误地提出了这个问题。我应该说旋转(轴,角度)之后的A与给定轴的B wrt之间的角度差为0.基本上,我想要找到指定平面中A和B之间的角度差。我希望现在这是清楚的。 – user80667

+0

如果我正确理解你的问题,答案仍然是一样的。将矢量投影到飞机上。然后计算投影向量之间的角度。 –

0

点积表示A & B之间的角度。 Fortran类似于:dotAB = DASIN(DOT(A/| A |,B/| B |))。

甲叉积给出了一个矢量orthongal到A和B.

朝着平面(或轴)Xproduct矢量的投影应该让你有当由所述角度DOTAB相乘。你可能在那里是一个正弦或余弦。