【问题标题】:Find angle of rotation to orient one vector to another if axis is known如果轴已知,则查找旋转角度以将一个向量定向到另一个向量
【发布时间】:2013-12-08 21:00:39
【问题描述】:

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

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

ps。我正在尝试在 three.js 中执行此操作。

【问题讨论】:

  • 你说向上向量(深绿色)和旋​​转轴(蓝色)作为向量给出。浅绿线是如何给出的?你能详细说明你想要做什么吗?更多信息会有所帮助:)
  • 抱歉含糊不清——它们都是向量。我试图在问题文本中澄清。

标签: 3d three.js linear-algebra


【解决方案1】:

注意

  1. 圆在平面 S 上,其法线平行于旋转轴(蓝色),
  2. 上向量和轴定义了一个平面 P,
  3. 红线在P上,
  4. 绿线在 S 上。

使用点积,我们可以将向上向量投影到 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 取决于轴的方向。请注意,如果向上向量和轴平行,这将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多