Нахождение точек перегиба множества точек

Я работаю над чем-то, что может соответствовать набору кривых Безье через набор точек. Я смог сделать это, используя метод подбора кривой из Pomax. Проблема с этим методом заключается в том, что он не может провести кривую Безье низкого порядка через линию, имеющую много перегибов. Поэтому, чтобы выполнить эту работу, мне нужно иметь возможность получить кусочно-кубическую безье, разделив кривую в ее точках перегиба, а затем запустив оттуда алгоритм подгонки кривой. Проблема в том, что я не знаю, как найти производную набора точек, у которых нет четкой функции. Думаю, я всегда мог вычислить наклон секущей вместо касательной, но не уверен, что это сработает. Есть ли у кого-нибудь лучшие идеи о том, как найти точки перегиба набора точек?


person Dr.Evil13    schedule 02.02.2020    source источник
comment
это 2D или 3D или ND?   -  person Spektre    schedule 03.02.2020


Ответы (1)


Точка перегиба является разделительной кривой, где кривизна обмотки идет от CW к CCW или наоборот. Итак, сначала определите обмотку.

Предположим, что это двухмерный случай...

Если ваши точки { p0,p1,p2,...,p(n-1) }, то обмотка в p(i) является sign из z координаты 3D cross произведения двух последовательных касательных:

w(i)  = cross (
              ( p(i).x-p(i-1).x , p(i).y-p(i-1).y , 0)
              ( p(i+1).x-p(i).x , p(i+1).y-p(i).y , 0)
              ).z

Итак, если p(i) является гибким, то:

w(i)*w(i-1) < 0

Проблема в том, что если w(i) или w(i-1) равно нулю, такую ​​обмотку нужно пропустить или обрабатывать особым образом.

person Spektre    schedule 03.02.2020