Учитывая большой набор вершин в не выпуклый многоугольник, как я могу найти края?

StackOverflow https://stackoverflow.com/questions/2741589

Вопрос

У меня есть набор вершин (называемый a), и я хочу найти все вершины границы, такие, как набор вершин границы является наброском формы.

Многие из вершин в A являются избыточны, потому что они внутри формы, я хочу избавиться от этих вершин.

Мой вопрос похож на Лучший алгоритм, чтобы найти края (многоугольник) вершин Но мне нужно, чтобы он работал на не выпуклый случай многоугольника.

РЕДАКТИРОВАНИЕ: Услыхание: пояснение: приведенное ниже изображение является вогнутым полигоном. Это то, что я имел в виду не выпуклый. Если я запускаю алгоритм выпуклого корпуса на нем, он не сохранит вогнутую часть многоугольника. (Если я не ошибаюсь).

concave polygon

У меня есть набор вершин внутри и на границе многоугольника: [[x1, y1], [x2, y2] ...] Я хочу уменьшить множество, чтобы вершины - это просто граница наброски формы.

Другие советы

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

(Этот ответ также дается в вопросе, к которому вы ссылаетесь на который, кажется, особый случай вашего вопроса)

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

Решение может быть выпустить соседние точки и рассчитать линейный наклон первого и второго, а затем сохранение этого значения наклона, рассчитайте наклон второго и третьего, если наклон PT1-PT2 равен The PT2-PT3 Тогда PT2 избыточен в формировании линии и, таким образом, может быть удален. Продолжайте зацикливаться до тех пор, пока вы не откажетесь от спины PT1.

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

Термин, который вы ищете, это вогнутый корпус.

Самая простая форма проблемы не является четкой, как выпуклый корпус, потому что вогнутый полигон, который охватывает данные точки, не является уникальным. Однако есть много хороших подходов.

Один из самых простых подходов, вы используете алгоритм упаковки подарков, но вместо того, чтобы рассмотреть все точки на каждом шаге, который вы считаете только k.- Нористые соседи текущей вершины.

Здесь k. Ваш Hyper-Parameter для настройки. Если k. слишком высоко, вы получаете выпуклый корпус. Если k. Слишком низко, что вы получаете многоугольник много вогнутостей.


Вот некоторые связанные ссылки:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top