Cutmull-Rom Spline笔记和个人理解

一、Spline理解

从简单的Bezier样条曲线开始:

一阶Bezier曲线:线性插值

给定两个点 P_{0} 和 P_{1},有:

B(t)=(1-t)P_0+tP_1

where, 0\leq t\leqslant 1

可以想象这是 从点  P_{0}  走向 ​P_{1} 的过程,就是一条直线上的点。

二阶Bezier曲线:插值的插值

给定三个点 P_{0} , P_{1}P_2,进行两步操作:

1、对两对相邻点做线性插值,有:

A_0(t)=(1-t)P_0+tP_1

A_1(t)=(1-t)P_1+tP_2

2、对插值出来的两个点再做插值,有

B(t)=(1-t)A_0+tA_1

可以理解成:在第一步中,我们获得了两条“线上的点”随着时间t变化的轨迹,第二步是让这两个点之间再随着时间变化做插值。

数学公式就是:

B(t)=(1-t)^2P_0+2(1-t)tP_1+t^2P_2

三阶Bezier曲线:

一阶贝塞尔曲线是:两点之间的滑动点
二阶贝塞尔曲线是:两个滑动点之间的滑动点
三阶贝塞尔曲线是:两个“两个滑动点之间的滑动点”之间的滑动点

二、Catmull-Rom Spline

是一种分段插值样条(通过其控制点的曲线),由四个控制点控制: P_{0} , P_{1}P_2P_3,曲线仅从 P_{1} 到 P_2

$\mathbf{P}_i = \begin{bmatrix} x_i \ y_i \end{bmatrix}$ 表示一个点。对于曲线段 $\mathbf{C}$ 由点$\mathbf{P}_0, \mathbf{P}_1, \mathbf{P}_2, \mathbf{P}_3$和节点序列 $t_0, t_1, t_2, t_3$ ,向心 Catmull–Rom 样条可以通过以下方式生成:

\mathbf{C} = \frac{t_2 - t}{t_2 - t_1} \mathbf{B}_1 + \frac{t - t_1}{t_2 - t_1} \mathbf{B}_2

\mathbf{A}_1 = \frac{t_1 - t}{t_1 - t_0} \mathbf{P}_0 + \frac{t - t_0}{t_1 - t_0} \mathbf{P}_1

\mathbf{A}_2 = \frac{t_2 - t}{t_2 - t_1} \mathbf{P}_1 + \frac{t - t_1}{t_2 - t_1} \mathbf{P}_2

\mathbf{A}_3 = \frac{t_3 - t}{t_3 - t_2} \mathbf{P}_2 + \frac{t - t_2}{t_3 - t_2} \mathbf{P}_3

\mathbf{B}_1 = \frac{t_2 - t}{t_2 - t_0} \mathbf{A}_1 + \frac{t - t_0}{t_2 - t_0} \mathbf{A}_2

\mathbf{B}_2 = \frac{t_3 - t}{t_3 - t_1} \mathbf{A}_2 + \frac{t - t_1}{t_3 - t_1} \mathbf{A}_3

t_{i+1} = t_i + \left \| P_{i+1} - P_i \right \|^{\alpha}

从节点序列的角度解释一下:曲线C的插值过程可以看作参数 t 从t_1 到t_2插值出路径点,构造

 C(t), t \in [t_1,t_2]

因为我们希望参数 t 能反应控制点之间的距离变化,从而在插值时保持曲线的匀速或自然感,所以通过参数\alpha \in[0,1],来控制插值参数t。

\alpha = 0 时,参数间隔均匀,如果两点之间距离很短,那么插值时它会以同样的“时间”穿过,导致曲线抖动,而如果\alpha=0.5之类的与距离相关的参数,就能缓解这种问题。

Barry和Goldman的金字塔公式

总结一下流程

1. 选择 4 个点 P_0, P_1, P_2, P_3;

2. 构造 knot 序列 t_0, t_1, t_2, t_3,常用 centripetal: t_{i+1} = t_i + \|P_{i+1} - P_i\|^{0.5};

3. 对于任意 t \in [t_1, t_2],递推计算一次插值 A,再计算二次插值B,最后得到三次插值C;

4. 重复对每段进行插值,可以绘制整条样条曲线。

三、CR 样条和 Bézier 曲线和 B 样条的区别

Catmull-Rom Spline(CR样条)Bézier 曲线B样条
类型一种 插值样条曲线一定通过控制点一种 逼近型样条曲线不一定经过控制点(除了首尾点),而是由控制点“牵引”形状。逼近型样条曲线,分段连续多项式构造
基函数分段三次样条,每段用 4 个点Bernstein 多项式De Boor-Cox 公式递归生成
曲线构建方式每两点之间生成一段曲线整个曲线由一组控制点决定分段连续多项式,而且在全曲线上有限阶可导/连续
性质改一点只影响相邻2段

全局性:无法对曲线形状进行局部控制,改变任一控制点位置时,整个曲线均受到影响。

端点性:曲线只经过两个端点的控制点(起点和终点),其它所有点只是逼近,一般不经过。

局部性:k阶曲线上的一点至多与k个控制点有关,与其它控制点无关。

不一定经过控制点

整条曲线有一个完整的表达形式,在有限阶内都十分平滑,但内在的量却是分段的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值