Я получаю некоторые прерывистые ошибки утверждений при выполнении ограниченной триангуляции Делоне с библиотекой триангулированных поверхностей GNU. Я видел каждое из следующего в разное время:
Gts: ОШИБКА: cdt.c: 974: remove_intersected_vertex: код не должен быть достигнут
Gts: ОШИБКА: 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]);
По-прежнему получаются те же ошибки подтверждения.