Как найти кривые угловых точек с помощью JTS или NTS?

У меня есть кривая (например, край JTS):

enter image description here

Как найти все точки изменения направления кривой, которые превосходят заданный угол с использованием JTS (Java) или NTS (С#):

enter image description here

Ответ 1

Я провел некоторое исследование и провел несколько тестов на JTS, и наилучшим образом я нашел:

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