【问题标题】:Global Quaternion conversion to Local Quaternion全局四元数转换为局部四元数
【发布时间】:2014-05-08 16:56:26
【问题描述】:

我正在使用四元数,但遇到了一个小问题。

我有一个对象(紫线)和一个相对于旋转轴的四元数(黑线),我想转换 局部空间中的这个四元数,使旋转轴成为对象

我需要计算对象的滚动(这将是我将转换为轴角度的局部空间中的 Y 旋转),然后计算 Axis 中的 X 和 Z 旋转角度

这是我为了更好地理解问题而绘制的一个方案:

为了理解你可以想象你的肩膀,当你移动你的手臂时,你有 X 和 Z 将决定前臂的位置,而 Y 将决定你的肘部的旋转。

不要犹豫,要求澄清,因为很难理解我在搜索什么。

我可以使用公式或算法吗?

是否有 3D 程序员使用过四元数并且可以通过算法或仅用文字向我解释这个主题?

【问题讨论】:

  • 这个问题似乎离题了,因为它是关于几何公式,而不是编程。
  • 嗯,这实际上是一个编程问题,因为我需要在 C# WPF 应用程序中进行编程。我有点迷路了,因为我在网上或任何地方都找不到东西..
  • 我也可以放一些我正在处理的代码,但这绝对不是我想要的四元数,所以我认为这可能有点令人困惑
  • 感谢您的链接,这不是一个真正的答案,但我想我可以使用它

标签: math rotation quaternions


【解决方案1】:

您正在寻找一个四元数 q,使得 qjq'=n,其中 n 是表示对象轴的虚数单位四元数。这有一个关于乘积 jn 的标准解,基本上是平方根。

如果

jn=c+s*e, e imaginary unit, c²+s²=1, s>=0

然后

q = sqrt(0.5*(1+c)) + sqrt(0.5*(1-c))*e

所以计算

p=j*n // condition is n is imaginary unit
c=real(p)
e=imag(p)
s=abs(e)
if(s>0) e=e/s else e=j 
s=sqrt(0.5*(1-c))
c=sqrt(0.5*(1+c))
q=c+s*e

另见https://stackoverflow.com/a/23414774/3088138

【讨论】:

  • 我会尝试实现这个,但我不确定是否全部理解,s 和 c 部分是什么?
  • 什么是j? j是世界的旋转轴吗?
  • 它是与 y 轴相关联的单位/基础四元数。如前所述,旋转轴是局部坐标中的 y 轴。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2014-03-12
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多