(也许这对数学堆栈交换更好?)
我有一个由骨头组成的链条。每块骨头都有一个尖端和尾部。下面的代码计算它的尖端的位置,给定一个旋转,并适本地设置链位置中的下一个链接:
// 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);
如果旋转应该围绕对象坐标系的原点发生,则此方法有效。但是,如果我希望围绕对象中的其他任意点进行旋转呢?我不知道如何翻译四元数。最好的方法是什么?
(我正在使用 JOGL/OpenGL。)
最佳答案
四元数专门用于处理旋转因子,但根本不包括平移。
通常,在这种情况下,您需要根据“骨骼”的长度对点应用旋转,但以原点为中心。然后,您可以将后旋转转换到空间中的正确位置。
关于opengl - 翻译四元数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3990044/