2014-05-08 57 views
1

我正在使用四元数,我有一个小问题。全局四元数转换为本地四元数

我有一个对象(紫色线)和相对于四元数与旋转轴线(黑线),并且我想转换这个四元数在局部空间,使得旋转轴成为对象

我需要计算辊对象的(WICH将在本地空间中的Y轴旋转,我将转换成轴的角度),然后计算在轴角 X和Z的旋转。

这里是我画了一个更好地了解问题的方案:

Schema

要了解你能想到你的肩膀,当你移动你的手臂,你有X和Z至极会确定前臂位置和Y这将决定你的肘部旋转。

不要犹豫,要求澄清,因为它可能很难理解我在寻找什么。

是否有一个公式或一个算法,我可以用它来做到这一点?

是否有3D程序员谁与四元数的工作,谁可以澄清我的主题与算法或只是文字?

+0

这个问题似乎是题外话题,因为它是关于几何公式,而不是编程。 –

+0

嗯它实际上是一个编程问题,因为我需要在C#WPF应用程序中用于编程目的。 我有点迷路,因为我无法在网上找到任何东西或任何地方.. – Tofandel

+0

另外,我可以把我正在处理的一些代码,但它绝对不是我想要的四元数,所以我认为可能有点混淆 – Tofandel

回答

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

+0

我会尽力实现这一点,但我不确定要理解这一切,s和c部分是什么? – Tofandel

+0

什么是j? j是世界的旋转轴吗? – bysreg

+0

它是与y轴相关的单位/基准四元数。如上所述,旋转轴将在本地坐标中成为y轴。 – LutzL