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