Алгоритм соединения точек периметра с прямоугольным многоугольником

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

Я нашел это упорядочивание перетасованных точек который можно соединить, чтобы сформировать многоугольник (в питоне), чтобы иметь отношение к моей проблеме, но у него есть проблема: если какие-либо точки превосходят центр многоугольника, алгоритм не работает...

Чтобы было более понятно, чего я хочу, я прилагаю две картинки, чтобы показать, чего я хочу достичь с заданными баллами:


Правильный способ соединения точек

Правильный способ соединения точек

Неверный способ соединения точек

Неправильный способ соединения точек

Есть ли алгоритм, который по заданным координатам точки создает прямоугольный периметр, как я хочу? Спасибо


person mitsos1os    schedule 24.03.2015    source источник
comment
Что ж.. Эта проблема не исчезнет, ​​даже если вы будете учитывать только вертикальные и горизонтальные линии. Посмотрите на букву H и поставьте точки в каждом углу этой буквы (черные пиксели H находятся внутри рисунка). Вы получите 12 точек, которые нельзя соединить уникальным образом. Как именно вы хотите соединить точки?   -  person JustAnotherCurious    schedule 24.03.2015
comment
Из-за характера веб-приложения такие дизайны будут недоступны, но если я должен сказать, то для 12 точек, которые вы упомянули, я бы хотел, чтобы они соединились и образовали H !   -  person mitsos1os    schedule 24.03.2015
comment
Как отмечает JustAnotherCurious, эта проблема недостаточно определена. Вы также знаете порядок, в котором были нарисованы точки? Если это известно, и природа вашей программы такова, что каждая точка смещается от предыдущей точки либо по вертикальной, либо по горизонтальной линии (т. е. никогда не по диагонали), тогда задача упрощается.   -  person j_random_hacker    schedule 24.03.2015
comment
ввод вашего приложения имеет какое-то конкретное ограничение? например, вы уверены, что набор точек должен иметь способ соединения в виде прямоугольного многоугольника? Как насчет ввода, похожего на 3 точки треугольника?   -  person shole    schedule 25.03.2015
comment
Порядок точек неизвестен, и они всегда представляют собой прямоугольный многоугольник. Прямо сейчас я реализовал собственный алгоритм, но я спрашивал, есть ли у кого-то новый более стандартный способ решения конкретной проблемы, потому что я ничего не мог найти. Я предоставлю свой алгоритм в качестве ответа, если никто больше ничего не опубликует.   -  person mitsos1os    schedule 25.03.2015
comment
Вы нашли решение этой проблемы?   -  person Marin    schedule 24.10.2018
comment
@Marin Я был бы более чем рад поделиться своим решением, но, к сожалению, проект был заброшен пару лет назад, и я не сохранил код...   -  person mitsos1os    schedule 25.10.2018
comment
@ mitsos1os ценю это, mitsos, ваш вопрос точно такой же, как у меня. Вы помните, вы использовали Monotone или решение Грэма?   -  person Marin    schedule 25.10.2018
comment
@Marin, насколько я помню, я основывал свое решение на перемещении только по вертикальным - горизонтальным линиям от начальной точки .... Но это может вызвать проблему, если ваши точки не находятся точно на той же координате y, поэтому двигайтесь прямо по вертикали и горизонталь не соответствовала бы фактической точке. Может быть, вы могли бы использовать некоторые показатели расстояния   -  person mitsos1os    schedule 31.10.2018
comment
@ mitsos1os Я пробовал сортировать против часовой стрелки, но не совсем сработало, придется кое-что попробовать. Спасибо, что нашли время ответить :)   -  person Marin    schedule 31.10.2018
comment
@Марин, я уверена, что ты найдешь что-то, что тебе подойдет! Удачи   -  person mitsos1os    schedule 01.11.2018