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