跳转到内容

spline

float  spline(string basis, float sample_pos, float value1, ...)

vector  spline(string basis, float sample_pos, vector value1, ...)

vector4  spline(string basis, float sample_pos, vector4 value1, ...)

此版本对所有关键点使用单一基础类型,并将(线性间隔的)关键值作为可变参数传入。

float  spline(string basis, float sample_pos, float values[], ...)

vector  spline(string basis, float sample_pos, vector values[], ...)

vector4  spline(string basis, float sample_pos, vector4 values[], ...)

此版本对所有关键点使用单一基础类型,并将(线性间隔的)关键值以数组形式传入。

float  spline(string bases[], float sample_pos, float values[], ...)

vector  spline(string bases[], float sample_pos, vector values[], ...)

vector4  spline(string bases[], float sample_pos, vector4 values[], ...)

此版本使用数组指定每对关键点之间的基础类型,并将(线性间隔的)关键值以数组形式传入。

float  spline(string bases[], float sample_pos, float values[], float positions[], ...)

vector  spline(string bases[], float sample_pos, vector values[], float positions[], ...)

vector4  spline(string bases[], float sample_pos, vector4 values[], float positions[], ...)

此版本使用数组指定每对关键点之间的基础类型,以及关键值数组和关键位置数组。

这些形式接受一个指定关键点间插值基础的字符串数组、关键值数组和关键位置数组。 即使关键位置非均匀分布(即间距不等),当相邻区段使用相同基础类型时,它们能确保插值曲线在控制点(关键点)处保持平滑(切线连续)。

basis, bases

这些是与渐变参数相同的插值类型。

"constant"

保持每个关键值直到下一个关键点,形成”阶梯”状曲线。

"linear"

用折线连接关键点。

例如,指定四个值时:

spline("linear", t, v0, v1, v2, v3)

…函数返回在sample_pos位置处橙色点的高度值。

"cubic" (或 "catmullrom", "cspline")

使用Catmull-Rom样条连接点值。

注意第一个和最后一个值位于采样区域外,用于提供曲线在第二个点(采样范围起点)和倒数第二个点(采样范围终点)处的斜率。

例如,指定六个值时:

spline("catrom", t, v0, v1, v2, v3, v4, v5)

…函数返回在位置t处橙色点的高度值。

(此图仅为示意,未显示所示点的正确曲线。)

"linearsolve" (或 "solvelinear")

在非均匀位置集合与值集合之间建立映射。kspline函数隐式实现了这种映射。

tk = spline("linearsolve", t, k0, k1, k2, k3, ...);
v = spline(basis, tk, v1, v2, v3, ...);

(技术上,linearsolve将值解释为关键值,求解样条交点并返回截距点。)

"monotonecubic"

无控制值超调的三次样条。

"bezier"

贝塞尔样条。

"bspline"

B样条基础。

"hermite"

埃尔米特样条。

sample_pos

在曲线上采样的位置。

返回值

在sample_pos位置处沿折线或三次样条的值。

注意 对于B样条基础,此函数隐式假设B样条曲线端点的重数为3,即使给定的控制点和节点没有显式重复。这确保曲线通过端点控制点,使得创建具有混合插值基础(例如被线性插值区段包围的B样条基础区段)的连续渐变曲线更加容易。