Ответ 1
Я провел некоторое исследование и провел несколько тестов на JTS, и наилучшим образом я нашел:
- Создайте полигоны и используйте функцию
union
- Затем перебираем координаты и создаем подматрицу на каждом "жестком угле" (отрицательное скалярное произведение), а когда сумма угла достигает 180 (не используйте последний угол, чтобы избежать проблем с функцией)
- Затем я меняю базу на ортонормированную базу с
x(firstElemOfSubArray, lastElemOfSubArray)
, вычисляя матрицу, меняющую базу, и затемx(firstElemOfSubArray, lastElemOfSubArray)
в новой системе координат - Затем я создаю функцию, используя
org.apache.commons.math3.analysis.interpolation.SplineInterpolator
для интерполяции функции курса, а затем я получаю производную и ищу экстремумы (не принимайте элементы с слишком низкой ординатой). С его абссом вы можете найти, какой точкой является точка перегиба - Таким образом, точка, которую вы ищете, - это первые элементы каждого вспомогательного массива, и точки ее перегиба (если они есть)