Я делаю сплайн-интерполяцию в C ++. Я использовал код здесь: http://tehc0dez.blogspot.ch/2010/04/nice-curves-catmullrom-spline-in-c.html (код также связан на этой странице, он на github). Приложение отлично работает для замкнутых контуров, так как копирует первые три точки до конца.
Но в моем случае я должен быть в состоянии сделать «открытую» форму — или, вернее, линию — где первая и последняя точки не связаны.
Насколько я понимаю, поскольку сплайн Кэтмулла-Рома является кубическим, я не смогу вычислить интерполированные точки для первого и последнего сегмента без добавления дополнительных точек.
Я читал, что распространенным методом интерполяции точек в этих двух сегментах является использование квадратичной интерполяции.
К сожалению, я не могу обернуть голову, как это сделать. Я узнал, как сделать квадратичное приближение Безье, но это не то, что я хочу сделать, так как я не хочу вводить какие-либо дополнительные точки поддержки.
Я нашел этот сайт: http://dafeda.wordpress.com/2010/09/01/newtons-divided-difference-polynomial-quadratic-interpolation/ Что довольно хорошо объясняет, как выполнять квадратичную интерполяцию. Но я не знаю, как адаптировать это для моего случая, где я хочу вычислить новую точку, а не просто y.
Любая помощь будет оценена. Спасибо !
Обычный способ сделать это — добавить вторую копию ваших двух конечных точек … Так что если у вас есть сплайн, проходящий через А-В-С-D тогда вы будете рассчитывать сплайн А-А-В-С-Д-Д.
Удалось реализовать достойное решение благодаря формуле, найденной здесь: http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Parametrics.html
Они также предоставляют хороший Java-апплет для проверки различных параметров.
Для моей проблемы я устанавливаю значение t1 равным 0,5 и проверяю, находится ли t выше / ниже этого порога, поскольку я хочу нарисовать только один сегмент кривой! Работает красиво.