Как создать невыпуклую оболочку из набора точек?

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

Я нашел статью, в которой рассматривается концепция генерации невыпуклых оболочек, но нет обсуждений того, как это реализовать на языке высокого уровня. http://www.geosensor.net/papers/duckham08.PR.pdf

Кто-нибудь видел прямой алгоритм построения невыпуклой оболочки или вогнутой оболочки или, возможно, какой-либо код Python для достижения того же результата?

Я пробовал выпуклые корпуса, в основном qhull, с ограниченным размером края с ограниченным успехом. Также я заметил некоторые лицензированные библиотеки, которые нельзя будет распространять, так что, к сожалению, это исключено. Любые лучшие идеи или поваренные книги?


person TelsaBoil    schedule 01.09.2010    source источник
comment
Возможно связанная информация: gis .stackexchange.com/questions/1200/   -  person Gilead    schedule 01.09.2010
comment
Хорошо ли определена проблема? Вам нужна любая невыпуклая оболочка, покрывающая точки? Или есть какие-то дополнительные ограничения? Рассмотрим три точки, образующие равносторонний треугольник, и четвертую точку в центре. Есть (по крайней мере) три возможных невыпуклых оболочки, которые окружают эти точки.   -  person Adrian McCarthy    schedule 01.09.2010
comment
Вау, все эти разнообразные сайты обмена стеками действительно хорошо справляются с перемещением вопросов за пределы поля зрения людей, которые могли бы на них ответить. :(   -  person dash-tom-bang    schedule 01.09.2010


Ответы (1)


Вы можете попробовать изучить Alpha Shapes. Библиотека CGAL может их вычислить.

Редактировать: я вижу, что в документе, на который вы ссылаетесь, упоминаются альфа-формы, а также есть список алгоритмов. Вам не достаточно высокого уровня? Поскольку вы указали python в качестве тега, я уверен, что в Python есть библиотеки триангуляции Делоне, что, как мне кажется, является самой сложной частью реализации алгоритма; вам просто нужно убедиться, что вы можете изменить результирующий вывод триангуляции. Функции граничных запросов, вероятно, могут быть реализованы с помощью ассоциативных массивов.

person Victor Liu    schedule 01.09.2010
comment
К сожалению, упомянутые вами привязки python для CGAL больше не компилируются с последними версиями boost-python и CGAL. Похоже, проект больше не поддерживается. Есть ли другие альтернативы Python? - person conradlee; 30.06.2011