3d - 四元数在 3d 模型上的加、减、除运算

标签 3d quaternions graphics3d

我只是在 3D 游戏编程中更深入地使用四元数(是的,我了解矩阵,它们也很好,但我们总是必须学习一些新东西),所以,我们可以像这样旋转一些对象Pout = q*Pin*conjug(q),其中 q 是四元数,Pin 是 Vector3 类的对象(假设我们正在使用某个框架,其中为我们定义了此类),conjug(q) 是共轭后的 q 四元数,最后,Pout 是新的 Vector3 的对象,这是我们在旋转初始 Vector3 的对象 Pin< 后得到的 某个角度 alfa(或 theta,无论你喜欢什么)。另外,我知道有一种方法可以组合旋转,如下所示:q_final = q2*q1(这表示按 alfa1 角度旋转,然后按 alfa2 角度旋转)。最后,点积表示球体中两个四元数之间的角度。这对我来说很清楚。我的问题涉及除法、加法和减法等问题。

我的问题是:有人能告诉我它们在 3D 编程中代表什么(四元数的除法、加法、减法运算)吗?它们对 3D 模型有何影响?

预先感谢您的回答。

p.s.如果您(DarenW、bensiu、Dharmendra、Uwe Keim、Jennis)无法理解这个问题,请留下这个话题。也许有人会有答案。谢谢。

最佳答案

如您所知,四元数可以用 4x4 实矩阵来识别。四元数乘法、标量乘法和加法通过此标识保留(参见http://en.wikipedia.org/wiki/Quaternion#Matrix_representations)。因此,将两个四元数转换为 4x4 矩阵,将它们相加,然后将它们转换回来与将它们相加相同。乘法也是如此。

四元数A除以四元数B无非是A乘以B的乘法逆元。这相当于A的矩阵形式乘以B的矩阵形式的逆元。

请注意,刚体旋转(无剪切或缩放)由单位长度四元数表示。因此,您可以通过乘以单位四元数来累积旋转。在这种情况下,加法没有那么有用。

最后,我们在图形中使用四元数的主要原因是插值关键帧(例如 Eberly 1999 )。也就是说,如果我们知道 k 个位置处所需的旋转,我们就可以对四元数进行插值,例如与样条曲线,产生四元数值曲线。每个值C(t)都是一个单位四元数,因此它代表一个中间旋转。使用齐次矩阵进行关键帧插值更加困难,因为并非所有 4x4 矩阵都表示齐次变换:插值过程可能会添加缩放、剪切等。

关于3d - 四元数在 3d 模型上的加、减、除运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148113/

相关文章:

c++ - 在进入 OpenGL/Direct3D 之前学习 3d 软件光栅化和理论有什么好处?

算法优化 : loop to find pair of items in 3D space

algorithm - 最小封闭球体的弹跳气泡算法

c# - 如何计算立方体中的点是否在WPF 3D中可见

html - HTML 中伪 3D 的数学帮助

javascript - THREE.js:需要帮助旋转四元数

c++ - 从 3D 空间中的 2 个点计算四元数/旋转

java - 在 TeeChart 中绘制 Graphics3D

java - 用Java渲染图像

math - 基于四元数的 3D 相机应该累积四元数还是欧拉角?