C++ 中是不是有标准的 3d 矢量类

Posted

技术标签:

【中文标题】C++ 中是不是有标准的 3d 矢量类【英文标题】:Is there a standard 3d vector class in C++C++ 中是否有标准的 3d 矢量类 【发布时间】:2011-04-20 12:28:38 【问题描述】:

在一个现有项目中,我看到了一个 Vector_3d 类,模板化,具有向量的常用操作(在代数的意义上)。在分析之后,我注意到在这个类中花费了大量的时间。

我想知道在 C++ 中是否有一个众所周知的实现,如 3d 矢量这样的基本概念。实际上,使用向量的良好实现可能比尝试优化它更容易。

编辑: 这是在某些对象的几何表示的上下文中。但它独立于任何可视化。我会看看是否有办法避免过于频繁地调用各种方法。我会看看建议的包。

【问题讨论】:

你参与了什么样的项目?如果它与 3D 渲染有关,您可能会幸运地使用成熟的实时渲染包。 您可能无法避免这个事实。也许您应该将关键字“内联”添加到常用函数之一。例如:光线追踪器经常使用许多函数,例如叉积,这是无法避免的 【参考方案1】:

3d 矢量类没有太大的改进空间(基本上,点/叉积相当容易,矩阵乘法也是如此)。 如果在该课程上花费了这么多时间,那么您使用它的代码可能有缺陷。你检查过吗

复制与参考 错误的关联(例如,将矩阵乘以所有向量,然后乘以结果矩阵,而不是所有向量乘以矩阵链)

我知道 Qt 中有 QVector3D,这可能会对您有所帮助(顺便说一下,他们获得了 Vector 2D 和 4D 以及常见的 3D 几何操作)

【讨论】:

【参考方案2】:

Dave Eberly 的 http://www.geometrictools.com/ 是此类课程的绝佳资源。

【讨论】:

【参考方案3】:

我偏爱Eigen。此外,它仅包含标头,并具有内置的矢量化支持。

【讨论】:

【参考方案4】:

Boost::QVM 也可以是一个选项:http://boostorg.github.io/qvm/

【讨论】:

以上是关于C++ 中是不是有标准的 3d 矢量类的主要内容,如果未能解决你的问题,请参考以下文章

C++晋升之std中vector的实现原理(标准模板动态库中矢量的实现原理)

C++ 3D 矢量模板

C++标准模板库(STL)——vector常见用法详解

C++--标准库 字符串类

是否有 3D 格式是 SVG 的 3D 扩展?

标准 C++ 中是不是有一种可移植的方式来检索主机名?