Как обнаружить полости в треугольной сетке?

#3d #geometry #collision-detection #trimesh

Вопрос:

Под «полостями» я не имею в виду ошибку в сетке — все сетки считаются водонепроницаемыми коллекторами.

Формальное определение: Треугольник T является прямой полостью, если невозможно разместить сферу S с заданным радиусом так, чтобы S касался только T. Треугольник T является косвенной полостью, если для сферы S нет пути без столкновений, начинающегося за пределами ограничительной рамки сетки до положения, когда S касается только T.

Различие между прямыми и косвенными полостями проводится только для целей определения. Метод, который я ищу, не нуждается в различении этих двух.

Это иллюстрирует проблему (в 2D):

введите описание изображения здесь

Обратите внимание, что именно так C выглядит в 3D: введите описание изображения здесь

Предпочтительно я хотел бы обнаружить эти полости на исходной сетке, но можно сделать повторное замешивание.