Nic*_*ner 3 opengl graphics jogl quaternions
(也许这对数学堆栈交换更好?)
我有一个由骨头组成的链条。每块骨头都有一个尖端和尾巴。下面的代码计算它的尖端的位置,给定一个旋转,并适当地设置链位置中的下一个链接:
// Quaternion is a hand-rolled class that works correctly (as far as I can tell.)
Quaternion quat = new Quaternion(getRotationAngleDegrees(), getRotation());
// figure out where the tip will be after applying the rotation
Vector3f rotatedTip = quat.applyRotationTo(tip);
// set the next bone's tail to be at this one's tip
updateNextPosFrom(rotatedTip);
Run Code Online (Sandbox Code Playgroud)
如果旋转应该围绕对象坐标系的原点发生,则此方法有效。但是,如果我希望围绕对象中的其他任意点进行旋转呢?我不知道如何翻译四元数。最好的方法是什么?
(我正在使用 JOGL/OpenGL。)
双四元数对于表达刚性空间变换(组合旋转和平移)很有用。
基于对偶数(Clifford 代数之一,d = a + eb,其中 a、b 是实数,e 不等于零但 e^2 = 0),对偶四元数 U + e V 可以表示空间中的线U 是单位方向四元数,V 是关于参考点的力矩。这样,双四元数线与普卢克线非常相似。
虽然四元数变换 QVQ*(Q* 是 Q 的四元数共轭)用于围绕一个点旋转单位向量四元数 V,但可以使用类似的对偶四元数形式来应用螺旋变换(围绕一个点的刚性旋转)。轴与沿轴的平移相结合。)
正如任何刚性 2D 变换都可以解析为围绕点的旋转一样,任何刚性 3D 变换都可以解析为螺钉。
对于这样的力量和表现力,对偶四元数的引用很少,维基百科文章是一个很好的起点。