如果已知轴,则找到旋转角度以将一个矢量定向到另一个矢量

时间:2013-12-05 22:09:38

标签: 3d three.js linear-algebra

我想旋转一个矢量,以绿色显示,使其朝向另一个矢量(也是绿色),进入红色虚线所示的位置。您可以将矢量视为位于圆形或圆盘上的旋转。我已经有旋转轴(蓝色)。找到旋转圆的角度需要哪些步骤?

enter image description here

此外,这种关系有没有名称?我不希望矢量完全“平行”,只是为了让它们在直视旋转轴时看起来排成一行。您可能会发现这在3D图形中称为“向上”向量,当“向上”向量始终为Y轴时,事情很简单。我想找到任意两个任意向量的广义解。

PS。我试图在three.js中做到这一点。

1 个答案:

答案 0 :(得分:1)

观察

  1. 圆在平面S上,其法线平行于旋转轴(蓝色),
  2. 向上矢量和轴定义平面P,
  3. 红线在P上,
  4. ,绿线在S上。
  5. 使用点积我们可以在S上投影向上矢量,以获得与红线平行的S上的向量V.然后我们可以计算V和绿线之间的角度。在three.js中,可以这样实现:

    // compute projection v
    var n = axis.clone().normalize(); // normal of S plane
    var d = up.dot(n); // distance from up vector to S plane
    var v = up.clone().sub(n.multiplyScalar(d)); // maybe -d
    
    // compute angle
    var angle = green.angleTo(v);
    

    d或-d取决于轴的方向。请注意,如果向上矢量和轴是平行的,则不起作用。