Java: периметр выпуклого многоугольника

У меня есть ArrayList из нескольких Point. Гарантируется, что точки являются частью выпуклого многоугольника.

Как я могу вычислить периметр этого выпуклого многоугольника?

Обновление: точки в ArrayList не в порядке

Обновление 2: все точки являются частью края выпуклого многоугольника.


person makesz1    schedule 27.04.2015    source источник
comment
Вы можете преобразовать точки в новый класс LineSegments, а затем суммировать длину сегментов линии. Если точки расположены не по порядку, вы можете построить матрицу, чтобы определить, кто связан друг с другом, и есть ли у вас полный полигон.   -  person Clark Kent    schedule 27.04.2015
comment
Какой метод будет правильным для поиска пар точек вокруг многоугольника? Как мне упорядочить список?   -  person makesz1    schedule 27.04.2015
comment
Все ли точки используются при создании этого многоугольника?   -  person Clark Kent    schedule 27.04.2015
comment
Все точки являются частью ребра   -  person makesz1    schedule 27.04.2015
comment
-1: Вопросы с просьбой помочь с домашним заданием должны включать в себя краткий обзор работы, которую вы проделали до сих пор, чтобы решить проблему, и описание трудности, с которой вы столкнулись при ее решении. stackoverflow.com/help/on-topic   -  person Alex Wittig    schedule 27.04.2015
comment
Когда точки находятся не в любом порядке, вам придется сначала отсортировать их. Что-то вроде stackoverflow.com/questions/29629482/ уже может быть достаточно. В противном случае вам пришлось бы выполнить en.wikipedia.org/wiki/Graham_scan , но второе обновление звучит так, как будто в этом нет необходимости   -  person Marco13    schedule 28.04.2015


Ответы (3)


Точки в порядке? Если это так, вам просто нужно просуммировать расстояние от каждой вершины до следующей.

person ControlAltDel    schedule 27.04.2015
comment
Они не в порядке, поэтому метод заказа - это мой настоящий вопрос, я думаю. - person makesz1; 27.04.2015
comment
Я знаю, как это сделать, но сначала решил бросить вам вызов: можете ли вы, используя точки, найти центр многоугольника? И если да, то когда у вас есть центр, можете ли вы каким-то образом использовать углы линий, проведенных из центра ко всем точкам, чтобы упорядочить их? - person ControlAltDel; 27.04.2015


Если точки не упорядочены, это невозможно без определения правильного порядка. Это потому, что если есть более 3 точек, они могут образовать более одного полигона.

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

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

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

Вопрос о том, как проверить, является ли многоугольник выпуклым, был задан и ответил здесь: Как определить, является ли многоугольник сложным/выпуклым/невыпуклым?< /а>

person Durandal    schedule 27.04.2015
comment
Разве нельзя было бы определить, были ли точки не в порядке, ища перекрывающиеся отрезки? - person Clark Kent; 27.04.2015
comment
@SaviourSelf Что ж, пересечение двух отрезков прямой наверняка будет доказательством того, что многоугольник не является выпуклым; так что это часть, чтобы помочь решить головоломку. - person Durandal; 27.04.2015
comment
Верно, но если использовать все точки, не будет ли только 1 цепи без пересечений? - person Clark Kent; 27.04.2015
comment
@SaviourSelf Что, если существует случай, когда существует перестановка, которая не имеет пересечений, но при этом не является выпуклой? - person Durandal; 27.04.2015
comment
Предполагая, что все точки могут образовывать выпуклый многоугольник, возможен ли такой случай? Я так не думаю, потому что это вызвало бы пересечение. - person Clark Kent; 27.04.2015
comment
@SaviourSelf Я могу представить два крайних случая, когда нет пересечений линий, но многоугольник может быть вогнутым: если одна координата точки появляется дважды или три последовательные точки, образующие прямую линию. Оба допускают отступ, который можно считать не пересекающимся. - person Durandal; 27.04.2015