Найдите среднюю ось полигона с помощью C#

Блокнот ++ работает просто великолепно, хотя я принимаю решение придерживаться Блокнота,-m, или даже иногда встроенного "редактирования".

проблема Вы встречаетесь, Блокнот использования ++ связан с тем, как мерзавец запускает исполняемый файл редактора. Мое решение этого состоит в том, чтобы установить РЕДАКТОРА на пакетный файл, а не фактический исполняемый файл редактора, который делает следующее:

start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %*

WAIT / говорит сессии командной строки останавливаться до выходов приложения, таким образом Вы будете в состоянии отредактировать к содержанию своей основы, в то время как мерзавец счастливо ожидает Вас. % * передает все аргументы пакетному файлу до Блокнота ++.

c:\src>echo %EDITOR%
c:\tools\runeditor.bat
6
задан Glorfindel 26 March 2019 в 09:01
поделиться

3 ответа

Одно простое решение будет таким, как предложено в комментариях:

  1. Постройте триангуляцию Делоне вершин многоугольника.
  2. Определите вершины Вороного внутри многоугольника (см. http://en.wikipedia.org/wiki/Point_in_polygon )
  3. Выведите ребра Вороного, соединяющие две внутренние вершины Вороного.

Если у вас есть огромные данные, пересечения могут быть довольно дорогостоящими.

] Тогда вы можете использовать аналогичный подход, как в вопросе , и это решение также может сработать для вас. Как я бы это сделал:

  1. Постройте триангуляцию Делоне вершин многоугольника.
  2. Вставьте среднюю точку каждого ребра многоугольника, которое не покрыто ребром Делоне. Делайте это рекурсивно до тех пор, пока все ребра многоугольника не будут покрыты ребрами Делоне.
  3. Отметьте все ребра Делоне, которые соответствуют ребру многоугольника.
  4. Извлеките среднюю ось, используя шаги 3.-5. в это решение

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

medial axis

12
ответ дан 8 December 2019 в 17:26
поделиться

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

2
ответ дан 8 December 2019 в 17:26
поделиться

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

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

Я думаю, что наивным подходом было бы отфильтровать все «Узлы» Ворони, которые находятся за пределами многоугольника, однако, не думаю, что будут смотреться. Если присмотреться к вашей диаграмме, кажется, что каждый узел имеет 3 ребра, которые соединяют его с другими узлами. Возможно, вы можете отфильтровать узлы, в которых любое из трех ребер связано с узлами за пределами многоугольника. Это сработает?

То же самое в нижнем левом углу.

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

Я думаю, что наивным подходом было бы отфильтровать все «Узлы» Ворони, которые находятся за пределами многоугольника, однако, не думаю, что будут смотреться. Если присмотреться к вашей диаграмме, кажется, что каждый узел имеет 3 ребра, которые соединяют его с другими узлами. Возможно, вы можете отфильтровать узлы, в которых любое из трех ребер связано с узлами за пределами многоугольника. Это сработает?

То же самое в нижнем левом углу.

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

Я думаю, что наивным подходом было бы отфильтровать все «Узлы» Ворони, которые находятся за пределами многоугольника, однако, не думаю, что будут смотреться. Если присмотреться к вашей диаграмме, кажется, что каждый узел имеет 3 ребра, которые соединяют его с другими узлами. Возможно, вы можете отфильтровать узлы, в которых любое из трех ребер связано с узлами за пределами многоугольника. Это сработает?

Если присмотреться к вашей диаграмме, кажется, что каждый узел имеет 3 ребра, которые соединяют его с другими узлами. Возможно, вы можете отфильтровать узлы, в которых любое из трех ребер связано с узлами за пределами многоугольника. Это сработает?

Если присмотреться к вашей диаграмме, кажется, что каждый узел имеет 3 ребра, которые соединяют его с другими узлами. Возможно, вы можете отфильтровать узлы, в которых любое из трех ребер связано с узлами за пределами многоугольника. Это сработает?

0
ответ дан 8 December 2019 в 17:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: