2026a

# 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(带有周期或变分端点条件)构造在双点(如果有的话)之间的光滑片段。

# 参考

[1] E.T.Y.Lee. "Choosing nodes in parametric curve interpolation." Computer-Aided Design 21 (1989), 363-370.

# 另请参阅

csape | fnplt