【发布时间】:2014-04-07 22:04:00
【问题描述】:
我有一个包含数百万个三角形的三角形网格。目前在我的数据结构中只存储了三角形和顶点。我想重建所有边缘并将它们存储在数据容器中。思路可能是这样的:遍历所有的三角形,得到它的每两个顶点,并在它们之间创建一条边。问题是共享边缘可能会创建两次。所以为了克服这个问题,我需要一个数据容器EdgeContainer 来存储边缘,它应该有一个功能来检查这个边缘是否已经创建。所以它就像一个有多个键的地图,但根据我的问题,这个地图还应该有以下功能:
-
EdgeContainer(v1, v2)应该返回与EdgeContainer(v2, v1)相同的结果,其中v1和v2是指向两个顶点的指针。 -
EdgeContainer应该有一个类似EdgeContainer::Remove(v1)的函数,它将删除所有与顶点v1相关的边。 - 实施应尽可能高效。
是否有任何现有的库可以处理这个问题?
【问题讨论】:
-
为什么一个简单的
map<Vertex, vector<Vertex>>不够用? -
@NicoSchertler,
Edge必须明确存储以供进一步使用,即存储其长度或其他一些属性。您的提案无法处理,是吗? -
那就改成
map<Vertex, vector<Edge*>>. -
如果你能够使用稀疏矩阵乘法,就像在 Matlab 中一样,那么这里有一个算法:mathproblems123.wordpress.com/2015/04/21/…
标签: c++ graphics hash map mesh