我有一个可打印3D形状的STL文件。 STL文件基本上是一个包含3个空间中代表3D对象的facet(具有法线的三角形)的包。每个面由3个顶点和法线表示。
使用哈希表我匹配所有等效的顶点并使用该信息来提取拓扑模型,这样我就可以请求一个关系,例如getNearbyFacets()和countNearbyFacets()。在对模型切片进行轮廓加工时,此信息非常重要。
以下是我匹配verticies的方法:
//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));
}
};
当我构造构面列表时,我将所有顶点推入一个unordered_set,然后将此集复制到一个向量中。对顶点的引用存储在构面对象中,这允许我基于相邻构面进行搜索。
此代码运行速度比我想要的慢。我的问题是如何在这个方面之间建立拓扑关系呢?
答案 0 :(得分:2)
您应该查看针对3D最近邻居搜索进行了优化的数据结构。这是最受欢迎的: