首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于GTS的约束Delaunay三角剖分中的断言失败

基于GTS的约束Delaunay三角剖分中的断言失败
EN

Stack Overflow用户
提问于 2011-06-17 15:08:55
回答 2查看 475关注 0票数 1

在使用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中):

代码语言:javascript
复制
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]);

仍然有相同的断言失败。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-27 04:14:20

即使输入错误,使用GTS的代码也不需要崩溃,所以最好防止这些断言失败,否则我将不得不禁用断言。

最后,我编写了一个补丁,它导致GTS (基本上)抛出一个异常,而不是当它遇到断言失败时停止。补丁是这里

票数 1
EN

Stack Overflow用户

发布于 2011-06-17 16:39:26

如果你完全随机地创建顶点和约束,我想你可能会提供彼此相交的约束边。在这种情况下,我当然会期望三角剖分程序会抱怨。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6387846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档