GNU Triangulated Surface Libraryを使用して制約付き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]);
それでも同じアサーションの失敗が発生します。