exponenta event banner

cscvn

«Естественная» или периодическая интерполяция кубической сплайновой кривой

Описание

пример

curve = cscvn(points) возвращает параметрическую вариационную или естественную кубическую сплайновую кривую (в ppform), проходящую через заданные точки последовательности (: j), j = 1: end. Значение параметра t (j) для пункта j-th следует за Юджином Ли [1] центростремительная схема как накопленный квадратный корень длины аккорда:

∑i<j‖points (:, i + 1) − точки (:, i) ‖ 2

Если первая и последняя точки совпадают и нет других повторяющихся точек), то функция создает периодическую кубическую сплайновую кривую. Однако двойные точки выливаются в углы.

Примеры

свернуть все

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

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

points=[0 1 1 0 -1 -1 0 0; 0 0 1 2 1 0 -1 -2]; 
fnplt(cscvn(points)); hold on, 
plot(points(1,:),points(2,:),'o'), hold off

Figure contains an axes. The axes contains 2 objects of type line.

Этот код отображает круговую кривую через четыре вершины стандартного ромба (из-за периодических граничных условий):

 fnplt(cscvn( [1 0 -1    0 1;0 1 0   -1 0] ))

Figure contains an axes. The axes contains an object of type line.

Этот код показывает угол в двойной точке, а также в конечной точке кривой:

 fnplt(cscvn( [1 0 -1 -1 0 1;0 1 0 0 -1 0] ))

Figure contains an axes. The axes contains an object of type line.

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

c=fnplt(cscvn([0 .82 .92 0 0 -.92 -.82 0; .66 .9 0 ...
-.83 -.83 0 .9 .66])); fill(c(1,:),c(2,:),'r'), axis equal

Figure contains an axes. The axes contains an object of type patch.

Входные аргументы

свернуть все

Последовательность точек, в которых параметрический «естественный» кубический сплайн интерполируется в, заданная как скаляр, вектор или матрица.

Выходные аргументы

свернуть все

Сплайн в ppform, возвращенный как структура с этими полями.

Форма сплайна, возвращенная как pp. pp указывает, что сплайн задан в кусочно-полиномиальной форме.

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

Коэффициенты многочленов для каждой части, возвращаемые как матрица или как массив для многомерных данных.

Количество частей полинома, описывающих сплайн, возвращаемое как скаляр или как вектор числа частей в каждой переменной для многомерных данных.

Порядок полиномиальной функции, описывающей каждый участок полинома сплайна, возвращаемый как скаляр или как вектор, содержащий порядок в каждой переменной для многомерных данных.

Размерность целевой функции, возвращаемой как скаляр.

Алгоритмы

Функция определяет последовательность разрывов t как

t = cumsum([0;((diff(points.').^2)*ones(d,1)).^(1/4)]).';

и использует csape (с периодическими или вариационными конечными условиями) для построения гладких отрезков между двойными точками (если таковые имеются).

Ссылки

[1] Э. Т. Я. Ли. «Выбор узлов в параметрической интерполяции кривых». Автоматизированное проектирование 21 (1989), 363-370.

Представлен в R2006b