Мое приложение использует CGAL для создания тетраэдрической сетки. На вход подаются шесть патчей (каждый в виде OFF-файла), образующих границу домена, а также файл с ребрами признаков (являющимися интерфейсами между патчами).
Благодаря помощи, которую я получил здесь и снова здесь, это сработало отлично много раз. Однако недавно я наткнулся на такой, казалось бы, безобидный пример:
Заметим, что нижний участок представляет собой сетку цилиндра, т. е. область не является выпуклой.
Это не удается со следующим сообщением об ошибке
Error: CGAL ERROR: assertion violation!
Expr: minimal_size_ > 0 || sq_d > 0
File: /path/to/CGAL-5.2/include/CGAL/Mesh_3/Protect_edges_sizing_field.h
Line: 750
Я активировал вывод отладки над утверждением. Непосредственно перед сбоем он печатает следующее
Nearest power vertex of (16.1 2.74455 159.976) is 0x44fafe0 (16.1 2.74455 159.976 5.47731e-28) at distance: 8.08582e-28
Nearest power vertex of (16.1 2.74455 159.976) is 0x44fb3d0 (16.1 2.74455 159.976 4.84338e-28) at distance: 9.66355e-30
Nearest power vertex of (16.1 2.74455 159.976) is 0x44fb050 (16.1 2.74455 159.976 2.73616e-27) at distance: 3.23196e-27
Nearest power vertex of (16.1 2.74455 159.976) is 0x44fb590 (16.1 2.74455 159.976 7.82747e-30) at distance: 0
Чтобы увидеть точку (16.1 2.74455 159.976)
, нужно увеличить очень близко к углу, где сходятся три полилинии объектов.
Вопрос 1
Что случилось?
Я предполагаю, что при построении защитных шаров требуемый квадрат радиуса каким-то образом падает примерно до 10 ^ -60, что считается нулем. Но этого не должно быть, верно? Я попытался помочь ему, изменив несколько входных параметров (размер целевого края, допуск поверхности и т. д.), но безрезультатно.
Вопрос 2 (если нельзя ответить на вопрос 1)
Не могли бы вы указать мне место в газетах, где именно это утверждение играет роль?
Думая, что у меня достаточно приличных знаний о триангуляции Делоне, я потратил несколько часов на чтение [7] и [8]. Однако мне потребовалось бы гораздо больше времени, чтобы понять детали алгоритма и его реализации, чтобы понять, что не так. Поэтому любая помощь (даже если она просто ограничивает область поиска) приветствуется.
Похожие вопросы
Я погуглил, но многого не нашел.
- Этот пользователь получил ту же ошибку, потому что его сетки не были подвергнуты совместному уточнению (у меня есть) .
- Другой пользователь получил ту же ошибку после использования
detect_features()
(тогда как я используюadd_features()
). - Также было обсуждение в списке рассылки (сейчас не могу найти), где у кого-то возникла такая же ошибка, потому что его треугольник имел нулевую высоту (это не мой случай).