使用GNU Triangulated曲面庫進行約束Delaunay三角測量時,我得到一些間歇斷言失敗。我見過的每一個在不同的時間如下:使用GTS約束Delaunay三角剖分的聲明失敗
GTS:ERROR:cdt.c:974:remove_intersected_vertex:代碼不應該達到 GTS:ERROR:cdt.c:896:remove_intersected_edge:斷言失敗:(下一個) Gts:錯誤: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]);
仍然得到同樣的斷言失敗。
謝謝,它可能會幫助刪除相交約束,但我仍然得到相同的斷言失敗。 (看我的編輯。) – jlstrecker