gpt4 book ai didi

opengl - 翻译四元数

转载 作者:行者123 更新时间:2023-12-01 07:16:17 26 4
gpt4 key购买 nike

(也许这对数学堆栈交换更好?)

我有一个由骨头组成的链条。每块骨头都有一个尖端和尾部。下面的代码计算它的尖端的位置,给定一个旋转,并适本地设置链位置中的下一个链接:

    // 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。)

最佳答案

双四元数对于表达刚性空间变换(组合旋转和平移)很有用。

基于对偶数(Clifford 代数之一,d = a + eb,其中 a、b 是实数,e 不等于零但 e^2 = 0),对偶四元数 U + e V 可以表示空间中的线U 是单位方向四元数,V 是关于引用点的力矩。这样,双四元数线非常类似于普卢克线。

虽然四元数变换 QVQ*(Q* 是 Q 的四元数共轭)用于围绕一个点旋转单位向量四元数 V,但可以使用类似的对偶四元数形式来应用螺旋变换(围绕一个点的刚性旋转)轴与沿轴的平移相结合。)

正如任何刚性 2D 变换都可以解析为围绕点的旋转一样,任何刚性 3D 变换都可以解析为螺钉。

对于这样的力量和表现力,双四元数引用很薄,而 Wikipedia article是一个很好的起点。

关于opengl - 翻译四元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3990044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com