Кубический сплайн: начальная / конечная интерполяция сегмента

Я делаю сплайн-интерполяцию в 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.

Любая помощь будет оценена. Спасибо!

2 ответа

Решение

Удалось реализовать достойное решение благодаря формуле, найденной здесь: http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Parametrics.html

Они также предоставляют хороший Java-апплет для проверки различных параметров.

Для моей проблемы я устанавливаю значение t1 равным 0,5 и проверяю, находится ли t выше / ниже этого порога, поскольку я хочу нарисовать только один сегмент кривой! Работает красиво.

Обычный способ сделать это - добавить вторую копию ваших двух конечных точек... Так что, если у вас есть сплайн, проходящий через ABCD, вы рассчитаете сплайн AABCDD.

Другие вопросы по тегам