C/C++ 中的四元数库 [关闭]

Posted

技术标签:

【中文标题】C/C++ 中的四元数库 [关闭]【英文标题】:quaternion libraries in C/C++ [closed] 【发布时间】:2010-10-05 05:38:15 【问题描述】:

在 C/C++ 中 quaternion 计算有什么好的库吗?

旁注:有什么好的教程/示例吗?我已经用谷歌搜索并浏览了前几页,但也许你有一些来自 compsci 或数学课程的演示/实验室,你可以/愿意分享?

谢谢

【问题讨论】:

cqrlib.sourceforge.net 【参考方案1】:

我是 Irrlicht 四元数类的粉丝。它是 zlib 许可的,很容易从 Irrlicht 中提取:

Irrlicht Quaternion Documentation quaternion.h

【讨论】:

第二个链接不幸失效了。【参考方案2】:

您可以尝试使用 Boost - 通常是开始的好地方。他们为此提供了dedicated sublibrary。

至于示例,请查看文档和 Boost 附带的单元测试。

【讨论】:

【参考方案3】:

还有 Eigen,这是一个用于 Blender 和 KDE 程序的数学和几何模板库,它在单个 .h 文件中定义了一个精巧的四元数类。

http://eigen.tuxfamily.org/index.php?title=Main_Page 和 http://www.ohloh.net/p/5393 的信息

【讨论】:

【参考方案4】:

如果你决定自己动手,或者真的想了解代码背后的数学原理(对调试很有用),我强烈推荐Martin Baker's website。看起来很原始,但解释透彻,易于理解,而且他还提供了一些地方的代码。

【讨论】:

【参考方案5】:

DirectX 有自己的quaternion functions,其他几个 3D 库也是如此。

在我看来,了解四元数如何工作的最佳方法是自己研究数学。 quaternions 和 conversion 上的***页面包含您需要的所有公式。我由此编写了自己的四元数库:)(它在 Haskell 中,所以我不会费心发布它。)

【讨论】:

DirectX 和图形的好主意。学习可以产生一些吸引人的视觉效果。 如果你找不到库,你自己做起来真的没那么难。我对此没有任何问题,而且我的 IT 数学培训非常有限(计算机科学商业学位,而不是纯科学)。【参考方案6】:

有关四元数的文档,请查看 3D 图形教科书。它们只是使用乘法而不是计算量大的三角函数来产生 3D 旋转效果的矩阵。

【讨论】:

【参考方案7】:

如果您使用四元数,这个网站euclideanspace 非常重要。它具有所有算术逐步,等价,简化,不同语言的代码示例。在此页面之后,我自己完成了大部分功能。我更喜欢下载图书馆。函数易于编程,您可以边学边学。

作为一个例子,我建议你检查这个关于四元数乘法的 c++ 函数: Efficient C++ quaternion multiplication using cv::Mat

【讨论】:

【参考方案8】:

graphene 是一个简单的 C/GObject 库,针对 3D 图形中常见的各种矢量、矩阵、四元数等计算进行了 SIMD 优化。

【讨论】:

以上是关于C/C++ 中的四元数库 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

结合具有不同枢轴点的四元数

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

将表示旋转的四元数从一个坐标系转换为另一个坐标系

如何在不使用 transform.Rotate 的情况下在其本地或世界轴上旋转带有第二个四元数的四元数?

最短路径的四元数 slerp 不起作用

从四元数中提取偏航