2016-05-20 10 views
0

Через Интернет я нашел квадратичную кривую бизера, задав три контрольные точки. Но что мне делать, если у меня есть набор очков?Кривая Безье: я хочу реализовать алгоритм для рисования непрерывной кривой с помощью алгоритма Безье

x = (1 - t) * (1 - t) * p [0] .x + 2 * (1 - t) * t * p [1] .x + t * t * p [ 2] .x;

y = (1 - t) * (1 - t) * p [0] .y + 2 * (1 - t) * t * p [1] .y + t * t * p [2 ] .y;

В моей программе у меня будет событие касания, когда пользователь прикасается к нему и перемещает палец по экрану, программа начинает рисовать кривую.

Если я делаю Android я могу использовать quadTo, но я не могу сделать это таким образом кузнями я хочу сделать это во многой платформе

+0

использовать по крайней мере кубический Безье они гораздо лучше присоединиться ... см [Как я производить многоточечная линейная интерполяция?] (HTTP: // stackoverflow.com/a/30438865/2521214), а ссылки ... – Spektre

+0

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

+0

Этот вопрос смешивает проблемы, требующие гладких движений касания, и специальное решение, которое использует безье, что может быть даже не лучшим решением в этом случае (возможно, лучше задать два разных вопроса?). – ideasman42

ответ

0

Для этого вам нужно будет использовать кривой фитинг алгоритма, это обычно выполняется итеративно с использованием решения наименьшего квадрата.

Обычной ссылка на это график-самоцветы FitCurve.c, см:

https://github.com/erich666/GraphicsGems/blob/master/gems/FitCurves.c

Хотя это хорошая ссылка его не так удобно, как функция библиотеки, так как его использование статических ВАР везде.


я извлек открытого Toonz аппроксимации кривой (также основанный на FitCurve.c) в автономном одной библиотеке файл C - который может рассчитать кривую.
https://developer.blender.org/diffusion/B/browse/master/extern/curve_fit_nd/intern/curve_fit_cubic.c
(имеет различные улучшения, см заголовок для деталей)

+0

, забудьте о трудных решениях и просто соедините точки, создав через них кривую Катмулла-Рома (предполагая, что андроид достаточно умен, чтобы передать вам «нужные вам очки», а не все точки. Если он дает все точки, что-то вроде уменьшите точки, нарисованные с помощью [Ramer-Douglas-Peucker] (https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm), исправит эту проблему) –

+0

Вправо, кривые представляют собой довольно весомое решение только для сглаживания кривой. Я просто разместил этот ответ, потому что вопрос задает конкретно о кривых Безье. – ideasman42

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

  • Нет связанных вопросов^_^