У меня есть список координат, которые должны образовывать края пути, которые мне нужно отсортировать. Я пытаюсь использовать сканирование Грэма и пробовал несколько образцов из:
Эти коды не работают для нескольких тестовых случаев, которые у меня есть, и я не уверен, что не так.
Редактировать:
Эти координаты должны быть частью касательных линий. Если координаты не отсортированы, касательные идут случайно вместо правильного пути, который может быть прямым или изогнутым по мере развития шторма.
Я создаю касательные к кругам, образующим путь бури. Пример можно увидеть здесь:
Редактировать#02
Правильная форма (не обращайте внимания на полукруг в конце) должна выглядеть так, если точки, образующие касательные линии, расположены правильно.
Тестовые случаи:
Тестовый пример № 01
[0]: {X = 11.581625 Y = -110.983437}
[1]: {X = 11.1816254 Y = -108.983437}
[2]: {X = 11.88781 Y = -113.115852}
[3]: {X = 11.587204 Y = -111.015938}
[4]: {X = 12.1884336 Y = -115.215759}
[5]: {X = 11.88781 Y = -113.115845}
[6]: {X = 12.5794077 Y = -116.863365}
[7]: {X = 12.1794081 Y = -115.163368}
[8]: {X = 13.0785418 Y = -118.855026}
[9]: {X = 12.5785418 Y = -116.855026}
[10]: {X = 13.534234 Y = -119.732178}
[11]: {X = 13.034234 Y = -118.732178}
Тестовый пример № 02
[0]: {X = 10.4182844 Y = -111.21611} [1]: {X = 10.0190592 Y = -109.21595} [2]: {X = 10.712142 Y = -113.283806} [3]: {X = 10.4127483 Y = -111.183716} [4]: {X = 11.0115175 Y = -115.383896} [5]: {X = 10.712141 Y = -113.2838} [6]: {X = 11.4204569 Y = -117.136063} [7]: {X = 11.0213022 Y = -115.435867} [8]: {X = 11.9213 Y = -119.144341} [9]: {X = 11.4223957 Y = -117.144066} [10]: {X = 12.4652023 Y = -120.266693} [11]: {X = 11.9662571 Y = -119.266167}
Тестовые случаи#03
[0]: {X = 10.6 Y = -109.1} [1]: {X = 11.0 Y = -111.1} [2]: {X = 11.3 Y = -113.2} [3]: {X = 11.6 Y = -115.3} [4]: {X = 12.0 Y = -117.0} [5]: {X = 12.5 Y = -119.0} [6]: {X = 13.0 Y = -120.0}
Пожалуйста, укажите мне ресурс, алгоритм или код, где я могу найти надежный алгоритм сортировки для координат с плавающей запятой и не устранять точки при этом. Скорость не в приоритете, точность в приоритете.
Буду признателен за все материалы. Спасибо