Нарисуйте выпуклую оболочку, используя заданные точки в java / Android

#java #android #polygon #convex-hull

#java #Android #полигон #выпуклая оболочка

Вопрос:

У меня есть несколько заданных 2D-точек, и я хочу нарисовать многоугольник, используя эти точки. Этот многоугольник должен проходить через все заданные точки, что означает, что нет такой точки, которая находится внутри или снаружи многоугольника.

Например: если у меня есть точки, подобные: (0,0), (1,1), (-1,-1),(-1,1) и (1,-1), и если я хочу нарисовать многоугольник, используя их, то мой массив точек должен быть отсортирован следующим образом:

(1,1) -> (1,-1) -> (-1,-1) -> (-1,1) -> (0,0) -> (1,1) ИЛИ

(1,1) -> (0,0) -> (-1,1) -> (-1,-1) -> (1,-1) -> (1,1)

но это не может быть:

(1,1) -> (0,0) -> (-1,-1) -> (-1,1) -> (-1,1) -> (1,-1) -> (1,1)

Для рисования многоугольника я использую функцию DrawLine и рисую линии от одной к другой точке и, наконец, от последней к первой точке.

Существует ли какой-либо алгоритм или код, доступный для этого?

Спасибо!!

Комментарии:

1. Но может ли это быть (1,1) -> (0,0) -> (1,-1) -> (-1,-1) -> (-1,1) -> (1,1) например? Может ли она проходить несколько раз мимо (0,0)? Что именно вы пытаетесь сделать?

Ответ №1:

Быстрый поиск в Google: алгоритмы выпуклой оболочки, и вот реализация Java.

РЕДАКТИРОВАТЬ: перечитал ваш вопрос и понял, что это не то, что вы хотели. Название «Выпуклая оболочка» может ввести в заблуждение…

Ответ №2:

Я думаю, что ваша проблема не так тривиальна, как кажется. ИМХО, это особая форма задачи коммивояжера, но без пересекающихся путей.