@YermolaevG

Как найти точки на плоскости, образующие выпуклый многоугольник?

Есть набор точек на плоскости, которые располагаются преимущественно ближе к краям плоскости. Как найти координаты самый близких к центру точек, образующих выпуклый многоугольник?
Поясню: программа предназначена для работы с пациентами, больными различными дегенеративными глазными заболеваниями, с ее помощью надо определить их область видимости.
  • Вопрос задан
  • 2761 просмотр
Решения вопроса 1
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Если вам мало треугольника, то общий подход следующий
  • отфильтровать подходящие точки
  • обвести их контуром Bounding Volume

Годные Bounding Volume это convex hull и k-dop. Для них разработаны и реализованы практичные алгоритмы построения. Например QuickHull для convex hull. Латиницей выделены теги для гугления.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Mrrl
@Mrrl
Заводчик кардиганов
Самый простой вариант: сортируете точки по возрастанию расстояния от центра, и для каждой точки по порядку проверяете, останется ли после её добавления многоугольник выпуклым, и не окажется ли внутри многоугольника уже просмотренных, но недобавленных точек. Если всё хорошо - добавляете точку к многоугольнику. Правда, придётся с чего-то начать. Самая очевидная кандидатура - треугольник из триангуляции Делоне, содержащий центр, но его может быть дорого искать.
Другой вариант - динамика по сторонам многоугольника. Сортируете точки по углу, выбираете отрезок (A1 A2) такой, что в треугольнике O A1 A2 нет других точек, и двигаетесь по кругу, пытаясь добавлять новые точки - A3, A4 и т.д. Для каждого варианта последней стороны A{k-1} Ak считаете наилучшее значение характеристики, которую оптимизируете (число вершин или площадь). Когда (если) многоугольник замкнётся - сравниваете его с оптимальным.
К сожалению, придётся перебрать все стартовые стороны. Можно ограничиться теми, которые пересекаются лучом Ox - хотя бы одна такая сторона в многоугольнике должна быть.
Оценка сложности - N^5.
UPD. Если внешний цикл вести не по отрезку (A1 A2), а по самой правой точке строящегося контура, то сложность уменьшится до N^4.
Ответ написан
Комментировать
@ivkol
задача не сформулирована строго. потому трудно что-то конкретное сказать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы