在使用GNU三角曲面库进行约束Delaunay三角评估时,我会遇到一些间歇性断言失败。我在不同的时间看到了以下每一件事:
Gts:ERROR:cdt.c:974:remove_intersected_vertex:代码不应该到达Gts:ERROR:cdt.c:896:remove_intersected_edge:断言失败:(下一步) Gts:ERROR:cdt.c:887:remove_intersected_edge:断言失败:(o2 == 0)
我看过cdt.c,但我只知道它们来自对gts_delaunay_add_constraint的调用。
有人能解释一下约束的问题是什么,这会导致这些断言失败吗?
当我试图对一组随机顶点进行三角剖分时,断言失败就会发生。不幸的是,这种情况只发生在大量的顶点和约束上,因此很难找到失败输入的模式。即使输入错误,使用GTS的代码也不需要崩溃,所以最好防止这些断言失败,否则我将不得不禁用断言。
编辑:尝试删除所有交叉约束(存储在edges中):
int numPossEdges = gts_fifo_size(edges);
GtsEdge **possEdges = malloc(numPossEdges * sizeof(GtsEdge *));
for (int i = 0; i < numPossEdges; ++i)
possEdges[i] = gts_fifo_pop(edges);
for (int i = 0; i < numPossEdges; ++i)
for (int j = 0; j < i && possEdges[i] != NULL; ++j)
if (possEdges[j] != NULL && GTS_IN == gts_segments_are_intersecting(&(possEdges[i]->segment), &(possEdges[j]->segment)))
possEdges[i] = NULL;
for (int i = 0; i < numPossEdges; ++i)
if (possEdges[i] != NULL)
gts_fifo_push(edges, possEdges[i]);仍然有相同的断言失败。
发布于 2013-01-27 04:14:20
即使输入错误,使用GTS的代码也不需要崩溃,所以最好防止这些断言失败,否则我将不得不禁用断言。
最后,我编写了一个补丁,它导致GTS (基本上)抛出一个异常,而不是当它遇到断言失败时停止。补丁是这里。
发布于 2011-06-17 16:39:26
如果你完全随机地创建顶点和约束,我想你可能会提供彼此相交的约束边。在这种情况下,我当然会期望三角剖分程序会抱怨。
https://stackoverflow.com/questions/6387846
复制相似问题