Делоне: Триангуляция двух точечных наборов с наилучшей подходящей сеткой

У меня есть облако со случайно распределенными точками и еще одно облако с теми же точками, но перемещающееся случайным образом. Таким образом, каждой точке облака A соответствует точка облака B.

Теперь я хочу триангулировать оба облака с помощью одной и той же треугольной сетки, найдя сетку с наименьшим количеством пересечений в обоих облаках.

Любые идеи?

Спасибо


person user973224    schedule 19.07.2012    source источник
comment
Это звучит как NP; он требует выбора ребер с определенными свойствами. Рассматривали ли вы какие-либо эвристические методы?   -  person andand    schedule 19.07.2012


Ответы (2)


Создайте случайную триангуляцию точек в облаке A и измерьте количество пересечений как в A, так и в B. Затем примените симуляцию отжиг для случайного добавления/удаления/перемещения ребер, которые сохраняют интересующие вас функции триангуляции, сохраняя и измеряя количество пересечений после каждой итерации.

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

person andand    schedule 19.07.2012
comment
Так что это своего рода метод грубой силы? - person user973224; 19.07.2012
comment
Имитация отжига — это не грубая сила; не гарантируется нахождение оптимального решения. Он может найти тот, который достаточно хорош, и сделать это в разумные сроки. Как я уже сказал в комментарии к вашему вопросу, это звучит так, как будто это может быть трудная проблема NP, делающая методы грубой силы непрактичными. Поскольку я так и не разобрался, сложно это или нет, то вполне возможно (даже вероятно), что моя первоначальная реакция неверна, и это легче, чем сложно NP. Если это так, то существует алгоритм с полиномиальным временем для поиска оптимального решения. - person andand; 19.07.2012

Первый очень простой подход, сделать (Делоне) триангуляцию на полусдвинутых позициях и использовать ее для обоих облаков. Это может дать хороший результат, если движение не слишком большое.

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

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

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

person Ante    schedule 20.07.2012