念一叨

切割 Bézier 曲线

控制点为 $\left\{\mathbf P_{0,\cdots,n}\right\}$ 的 Bézier 曲线的定义为: $$ \mathbf B_{\left\{\mathbf P_{0,\cdots,n}\right\}}(t) := \sum_{i=0}^n\binom ni t^i(1-t)^{n-i}\mathbf P_i. \qquad\text{($t\in [0,1]$)} $$ 每条 Bézier 曲线完全由其控制点定义。

定义:一条 Bézier 曲线 $\mathbf B_0$ 在 $t=\alpha$ 处的切割为两条 Bézier 曲线 ${\mathbf B_1,\mathbf B_2}$,满足: $$\begin{cases} \displaystyle\mathbf B_0(t)=\mathbf B_1\left(\frac{t-0}{\alpha-0}\right), \qquad\text{($t\in [0,\alpha]$)} \ \displaystyle\mathbf B_0(t)=\mathbf B_2\left(\frac{t-\alpha}{1-\alpha}\right). \qquad\text{($t\in [\alpha,1]$)} \end{cases}$$

显然可以换元: $$ u:=\frac{t-\alpha}{\beta-\alpha} \quad\Leftrightarrow\quad t=(\beta-\alpha)u+\alpha, $$ $$ \mathbf B(t) =\sum_{i=0}^n \binom ni t^i(1-t)^{n-i}\mathbf P_i =\sum_{i=0}^n \binom ni u^i(1-u)^{n-i}\mathbf P^\prime_i =\mathbf B^\prime(u), $$ 记 $c_i(x):=\binom ni x^i(1-x)^{n-i}$, $\mathbf c(x):=[c_0(x)\ c_1(x)\ \cdots\ c_n(x)]^T$, $\mathrm P:=[\mathbf P_0\ \mathbf P_1\ \cdots\ \mathbf P_n]^T$, 可以写成矩阵形式: $$\mathrm P\mathbf c(t)=\mathrm P^\prime\mathbf c(u).$$ 随便带入几组参数,使得约束的个数与 $n$ 相等即可: $$ \mathrm P \left[\mathbf c(t_0)\ \mathbf c(t_1)\ \cdots\right] = \mathrm P^\prime \left[\mathbf c(u(t_0))\ \mathbf c(u(t_1))\ \cdots\right], $$ $$ \mathrm P^\prime = \mathrm P \left[\mathbf c(t_0)\ \mathbf c(t_1)\ \cdots\right] \left[\mathbf c(u(t_0))\ \mathbf c(u(t_1))\ \cdots\right]^{-1}. $$

下面是一个能够把一条 Bézier 曲线分成两段的 live demo: