有效地从STL文件生成拓扑
Efficiently generating a topology from an STL file
我有一个可打印的3D形状的STL文件。STL文件基本上是一个装满面(带法线的三角形)的袋子,在3空间中表示一个3D对象。每个面由3个顶点和一条法线表示。
使用哈希表,我匹配了所有等效的顶点,并使用该信息提取拓扑模型,以便我可以请求关系,例如getNearbyFacets()和countNearbyFacets()。这个信息在稍后绘制模型切片时非常重要。
下面是我如何匹配垂直://used to compare pointers to the vertex objects
struct lex_compare {
bool operator() (CAMu3DPoint const* lhs, CAMu3DPoint const* rhs) const{
return *lhs == *rhs;
}
};
//hash function for the verticies
struct lex_hash{
std::size_t operator()(CAMu3DPoint const* vert) const{
return
(std::hash<float>()(vert->x)) ^
(std::hash<float>()(vert->y)) ^
(std::hash<float>()(vert->z));
}
};
当我构造facet列表时,我将所有顶点推入一个unordered_set,然后将该集合复制到一个向量中。对顶点的引用存储在facet对象中,这允许我基于邻近的facet进行搜索。
这段代码的运行速度也比我想要的慢。我的问题是如何在我的面之间更快地创建拓扑关系?
您应该查看为3D最近邻搜索优化的数据结构。以下是最受欢迎的:
- 二进制空间划分(BSP)和k-d树
- 位置敏感散列(LSH)
- r - tree
相关文章:
- STL 的头文件
- 在函数 C++14 中包含 STL 头文件
- 如何使用 STL C++读取文件和保存连字符
- 如何使用 STL 中的容器读取文件
- 修复可能损坏的 .stl 文件上的法线
- 将STL文件添加到QT小部件
- 如何为C++ STL 模板文件生成标记文件,例如未来
- 使用.txt文件填充 STL 列表不起作用
- C 库从3D文件格式(例如STL)获得常规网格
- 将多个 stl 文件合并为一个
- 导入 .C++ 中的 STL 文件?
- 如何将 STL 映射保存到文件C++
- 对 stl 的头文件
- 显示一个错误(在Visual Studio中),当某人试图在当前.cpp或.h文件中使用STL时
- 包括(STL)标题中的标题文件
- 如何使用 STL 将 STDIN 转储到文件中C++
- 将文件读取到stl矢量时删除rn
- 如何将RAW文件(3D图像)转换为STL格式
- STL容器,用于在C++中组合多个非常大的光栅数据文件
- STL正在从文件中读取