找到矢量之间的角度

时间:2012-05-08 22:46:52

标签: math vector angle

  

可能重复:
  Finding Signed Angle Between Vectors

我需要一些小数学问题的帮助。

所以,我得到一个向量v,代表一个方向,两个点s和t。我该做什么,是找到应用于我的向量v的旋转,以使其与由两个给定点定义的向量平行。

目前我有点实现这一点,也就是说,我能够找到角度,而不是应用它的方式(顺时针或逆时针)。

目前我只是计算向量的点积的acos。

欢迎任何输入。

1 个答案:

答案 0 :(得分:3)

假设acos为您提供0到pi之间的值。

我们还要说st的向量称为u。正如您已计算的那样,

acos((v . u)/(|v| * |u|))

为您提供角度alpha。事实上,v可以ualpha方向旋转一个或另一个方向。

你可能需要2D,但我会先用3D继续。

旋转应围绕垂直于vu的矢量。这个向量当然是两者的交叉乘积:u x v

让我们看一个例子:

   / v
  /
 /\  alpha
/  )
------------ u

在这种情况下,u x v会向显示器外部提供一个向量。同时,您可以看到配给alpha应该逆时针,以使vu平行。

也就是说,在3D中,您必须计算w = u x v并始终相对于v逆时针旋转alpha w。或者,您可以v顺时针alpha相对于-wv x u)进行轮播。

在2D中,我假设你想围绕z旋转而你不知道哪个方向。您可以应用与上述相同的方法:

  • 计算w = u x v
  • 如果w具有正z(x和y将为零)
    • 然后,v应逆时针旋转。
    • 否则,v应顺时针旋转。