# cscvn
“自然”或周期性三次样条曲线插值
函数库: TyCurveFitting
# 语法
curve = cscvn(points)
# 说明
curve = cscvn(points) 返回通过给定序列点 [:j], j = 1:end的参数变分或自然三次样条曲线(以 ppform 形式)。第j个点的参数值 t[j]遵循 Eugene Lee 的[1]向心方案,即作为弦长的累积平方根:
如果第一个点和最后一个点重合而且没有其余的重复点,则该函数绘制一个周期三次样条曲线,重复的点将会形成角点。示例
# 示例
绘制内插三次样条曲线
此示例说明如何使用cscvn函数构造和绘制多个不同的内插三次样条曲线。
此代码生成一系列点,然后绘制从cscvn函数生成的三次样条。所选点标记为圆圈:
using TyCurveFitting
using TyPlot
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")
此代码通过标准菱形的四个顶点绘制一条圆形曲线(因为强制执行的周期性边界条件):
fnplt(cscvn([1 0 -1 0 1;0 1 0 -1 0]))
此代码显示了在曲线端点双点形成的角点:
fnplt(cscvn( [1 0 -1 -1 0 1;0 1 0 0 -1 0] ))
最后,这段代码生成了一条带有一个双点的闭合曲线,从而产生了一个拐角。将此献给您所爱的人。
c = fnplt(cscvn([0 .82 .92 0 0 -.92 -.82 0; .66 .9 0 -.83 -.83 0 .9 .66]),"r")
axis("equal")
# 输入参数
points - 点序列标量 | 向量 | 矩阵
参数“自然”三次样条的插值点序列,指定为标量、向量或矩阵。
数据类型: Int | Float
# 输出参数
curve - 样条结构体样条结构体
pp型的样条,为带有以下元素的结构体。
Form - 样条格式"pp"
样条的格式,以 "pp" 返回。"pp" 样条是以分段多项式的形式给出。
数据类型: String
Breaks-样条节点位置向量 | 数组元组
样条节点位置,单变元时以向量,多变元时以向量元组形式返回。向量包含严格增元素,逐点分别表示各段多项式定义区间的左右端点。
数据类型: Int | Float
Coefs - 多项式的系数矩阵 | 数组
各段多项式的系数,单变元时以矩阵,多变元时以数组形式返回。
数据类型: Int | Float
Pieces - 多项式分段段数标量 | 向量
描述样条的多项式分段的段数,单变元时以标量,多变元时以各变元段数组成的向量形式返回。
数据类型: Int
Order - 多项式阶数标量 | 向量
描述样条的分段多项式的阶数,单变元时以标量,多变元时以各变元阶数组成的向量形式返回。
数据类型: Int
Dim - 维数标量
目标函数的维数,以标量形式返回。
数据类型: Int
# 算法
函数使用以下方式决定断点序列t:
t=cumsum([0;((diff(points',dims=1).^2)*ones(d,1)).^(1/4)],dims=1)'
并且使用 csape(带有周期或变分端点条件)构造在双点(如果有的话)之间的光滑片段。