2017-02-18 6 views
3

Я хочу подогнать кривую Безье с известными конечными точками (p0 и p3) на шумные 2d-данные. Это кажется более простой проблемой, чем традиционная 4-точечная установка кривой безье, но все же слишком сложная для меня.Фиксация кривой Безье с известными конечными точками

Может ли кто-нибудь указать мне на существующий код или алгоритм, чтобы найти наилучшие значения для контрольных точек p1 и p2?

Bezier curve fitting

редактировать: Точки, которые я пытаюсь соответствовать с кривой Безье происходит из кривых, нарисованных с помощью мыши (представьте себе рисовать что-то с помощью кисти в краски, не может быть сотни записанных точек за один длинный удар). Якорные точки p0 и p3 создаются заранее, но контрольные точки p1 и p2 должны вычисляться так, чтобы безье соответствовало форме кривой, нарисованной с помощью мыши.

ответ

2

Я наткнулся на бумагу под названием «KKK», которая описывает алгоритм вычисления точной вещи, которую я ищу.

Внедрение в javascript было легко. Он работает неплохо и быстро, но полученные кривые Безье не идеальны. Может быть ошибкой в ​​моем коде, но я подозреваю, что лучшие кривые могут быть получены путем итеративной настройки точек совпадения кривой безье, чтобы лучше соответствовать данным bezier curve creation.

Редактировать: Оказывается, вы можете использовать newton-raphson для оптимизации каждого отдельного t-значения для кривой Безье. После этого кривая подходит отлично, по крайней мере, для кривых с несколькими точками, которые не пересекаются друг с другом, но я должен сделать еще несколько тестов. Newton step optimization of bezier t-values

+0

Почему бы не использовать вместо этого сплайн-шлем? Тем не менее кубический полибезье, но * через * точки, а не «своего рода вокруг». –

+0

Идея заключалась в том, чтобы использовать это в программном обеспечении для векторного рисования, которое опирается на кривые Безье, поэтому сплайны не будут работать в этом случае. – filip

+0

, за исключением того, что они были бы в этом случае: шипы Catmull Rom эквивалентны кубическому поли-Безье (каждая секция CR является гермитовой сплайном, которая может быть представлена ​​либо сплайном CR, либо как кубическая кривая Безье, подобно тому, как вы можете представить Безье либо как математику функция или как последовательность интерполяций. То же, разные, эквивалентные, представления), поэтому, как только у вас есть CR-сплайн, преобразование его координат в те части последовательности явных кубических Beziers [тривиально] (http: //pomax.github .io/bezierinfo/# catmullconv) (прокрутите до конца раздела только для правил преобразования) –

Смежные вопросы