$B={b_i}{i=1}^n$,$f(x)=\sum{i=1}^nc_ib_i(x)\in B$,有
$$
y_i=f(x_i)=\sum_{j=1}^nc_jb_j(x_i) \quad (j=1,\dots,n)
$$
设 $M=(b_j(x_i)){i,j=1}^n$,$\pmb{y}=(y_i){i=1}^n$,$\pmb{c}=(c_i)_{i=1}^n$,则上式变为
$$
M\pmb{c}=\pmb{y}
$$
则
其中 $$ l_i(x)=\frac{\prod_{j\neq i}(x-x_j)}{\prod_{j\neq i}(x_i-x_j)} $$
其中
误差估计
$$
|f(x)-B_n(f,x)|<\frac{9}{4}m_{f,n}
$$
其中
函数空间 $B={b_i}{i=1}^n$,样本点 ${(x_i,y_i)}{i=1}^m$,目标函数
示例
- 规范:$\sum_{i=0}^n B^n_i(t)=1$
- 对称性:$B_i^n(t)=B_{n-i}^n(1-t)$
- 非负
$B_i^n(t)\ge 0,t\in[0,1]$ $B^n_i(t)>0,0<t<1$ $B_0^n(0)=1,B_1^n(0)=\dots=B_n^n(0)=0$ $B_0^n(0)=\dots=B_{n-1}^n(0)=0,B_0^n(0)=1$
- 递推:$B_i^n(t)=(1-t)B_i^{n-1}(t)+tB_{i-1}^{n-1}(t)$,设
$B_0^0=1$ ,$B^n_i(t)=0$($i<0$ 或$i>n$ ) - 导数:$\frac{\mathbb{d}}{\mathbb{d}t}B_i^n(t)=n[B_{i-1}^{n-1}(t)-B_i^{n-1}(t)]$
- 最值点:$B^n_i(t)$ 在
$t=\frac{i}{n}$ 处取最大值 - 升阶:$(1-t)B^n_i(t)=\left(1-\frac{i}{n+1}\right)B^{n+1}i(t)$,$tB^n_i(t)=\frac{i+1}{n+1}B^{n+1}{i+1}(t)$
运算框架
导数 $$ \pmb{x}^{(r)}(t)=c_r\sum_{i=0}^{n-r}B^{n-r}i(t)\Delta^r\pmb{p}i $$ 其中 $\Delta^r p_i = \sum{j=0}^r\mathrm{C}r^j(-1)^j\pmb{p}{i+r-j}$,$c_r=\prod\limits{i=1}^r(n-i+1)$
端点 $$ \begin{aligned} \pmb{x}^{(r)}(0)&=\prod_{i=1}^r(n-i+1)\Delta^r\pmb{p}0\ \pmb{x}^{(r)}(1)&=\prod{i=1}^r(n-i+1)\Delta^r\pmb{p}_{n-r}\ \end{aligned} $$
示例 $$ \begin{aligned} \pmb{x}^\prime(t)&=n\sum_{i=0}^{n-1}B^{n-1}i(t)\left(\pmb{p}{i+1}-\pmb{p}i\right)\ \pmb{x}^{(2)}(t)&=n(n-1)\sum{i=0}^{n-2}B^{n-2}i(t)\left(\pmb{p}{i+2}-2\pmb{p}{i+1}+\pmb{p}i\right)\ \pmb{x}^{(3)}(t)&=n(n-1)(n-2)\sum{i=0}^{n-3}B^{n-3}i(t)\left(\pmb{p}{i+3}-3\pmb{p}{i+2}+3\pmb{p}{i+1}-\pmb{p}i\right)\ \pmb{x}^\prime(0)&=n\left(\pmb{p}{1}-\pmb{p}0\right)\ \pmb{x}^\prime(1)&=n\left(\pmb{p}{n}-\pmb{p}{n-1}\right)\ \end{aligned} $$
对于 Bezier 曲线,$\pmb{b}_i$ 影响最大处位于
仿射变换
仿射不变性:$f(\pmb{x}(t))=\sum_{i=0}^nb_i(t)f(\pmb{p}i)$,化简可得 $\sum{i=0}^nb_i(t)=1$
${\pmb{p}i}{i=1}^n$ 的凸组合 $\sum_{i=1}^n\lambda_i\pmb{p}i$,其中 $0\le \lambda_i\le 1$,且 $\sum{i=1}^n\lambda_i=1$
$\pmb{x}(t)=\sum_{i=0}^nb_i(t)\pmb{p}i$ 是凸组合 $\Leftrightarrow$ $\sum{i=0}^nb_i(t)=1,0\le b_i(t)\le 1$
若 Bezier 曲线的特征多边形
输入:${\pmb{b}i}{i=0}^n$
输出:$\pmb{x}(t),t\in [0,1]$
算法:
$$
\begin{array}{ll}
\pmb{b}^0_i(t)=\pmb{b}_i\quad &i=0,\dots,n\
\pmb{b}^r_i(t)=(1-t)\pmb{b}^{r-1}i(t)+t\pmb{b}^{r-1}{i+1}(t) &r=1,\dots,n;i=0,\dots,n-r
\end{array}
$$
则
运算框架
输入:${\pmb{b}i}{i=0}^n$,相应 Bezier 曲线
输出:${\overline{\pmb{b}}i}{i=0}^{n+1}$,相应 Bezier 曲线
算法: $$ \bar{\pmb{p}}{i}=\frac{i}{n+1}\pmb{p}{i-1}+\left(1-\frac{i}{n+1}\right)\pmb{p}i\ $$ $\pmb{p}{-1},\pmb{p}_{n+1}$ 任意
输入:${\pmb{b}i}{i=0}^n$,相应 Bezier 曲线
输出:
$\pmb{b}_0^{[1]},\dots,\pmb{b}_n^{[1]}\to \pmb{x}^{[1]}(t)$ $\pmb{b}_0^{[2]},\dots,\pmb{b}_n^{[2]}\to \pmb{x}^{[2]}(t)$
两条曲线合并可得到
算法:
用 De Casteljau 算法得到 $$ \begin{matrix} b^n_0\ b^{n-1}_0&b^{n-1}_1\ \dots\ b^0_0&b^0_1&\dots&b^0_n \end{matrix} $$
则
三次 Bezier 曲线
可写成矩阵形式 $$ \pmb{x}(t)= \left[\begin{matrix} t^3 & t^2 & t & 1 \end{matrix}\right] \left(\begin{matrix} -1 & 3 & -3 & 1\ 3 & -6 & 3 & 0\ -3 & 3 & 0 & 0\ 1 & 0 & 0 & 0 \end{matrix}\right) \left[\begin{matrix} \pmb{p}_0\ \pmb{p}_1\ \pmb{p}_2\ \pmb{p}_3\ \end{matrix}\right] $$ 切向量 $$ \pmb{x}^\prime(t)= \left[\begin{matrix}3t^2 & 2t & 1 & 0\end{matrix}\right] \left(\begin{matrix} -1 & 3 & -3 & 1\ 3 & -6 & 3 & 0\ -3 & 3 & 0 & 0\ 1 & 0 & 0 & 0 \end{matrix}\right) \left[\begin{matrix}\pmb{p}_0\\pmb{p}_1\\pmb{p}_2\\pmb{p}_3\\end{matrix}\right] $$
曲线
正则:$c^\prime(t)\neq 0$
切向量:$\pmb{t}=\frac{c^\prime}{|c^\prime|}$
副法向
主法向
曲率
平面正则曲线曲率
扰率
$f(t)$ ,$\dot{f}=\frac{\mathrm{d}f}{\mathrm{d}t}$
$f^\prime=\frac{\mathrm{d}f}{\mathrm{d}s}$
从
弧长参数化曲线
主法向 $$ \pmb{n}=\frac{c''}{|c''|} $$ 曲率 $$ \kappa=|c^{\prime\prime}| $$
Frenet 曲线
Frenet 坐标系基向量 ${e_i}{i=1}^n$ 可对 ${c^{(i)}}{i=1}^n$ 正交化得到
对于弧长参数化平面曲线
$$
e_1(s)=c^\prime(s)\
e_2(s)=R^{90^\circ}e_1(s)=\frac{c^{\prime\prime}(s)}{|c^{\prime\prime}(s)|}\
$$
坐标系方程
$$
\left( \begin{array} { l } { e _ { 1 } ( s ) } \ { e _ { 2 } ( s ) } \end{array} \right) ^ { \prime } = \left( \begin{array} { c c } { 0 } & { \kappa ( s ) } \ { - \kappa ( s ) } & { 0 } \end{array} \right) \left( \begin{array} { l } { e _ { 1 } ( s ) } \ { e _ { 2 } ( s ) } \end{array} \right)\
$$
其中有符号曲率
密切圆半径
弧长函数的导数 $$ \frac{\mathrm{d}f}{\mathrm{d}s}=\frac{\mathrm{d}f/\mathrm{d}t}{\mathrm{d}s/\mathrm{d}t}=\frac{\dot{f}}{|\dot{c}|} $$ 则一般参数化平面曲线的 Frenet 坐标系 $$ e_1(s(t))=c^\prime(s(t))=\frac{\dot{c}(t)}{|\dot{c}(t)|}\ e_2(s(t))=R^{90^\circ}e_1(s(t))\ \kappa ( s(t) ) = \left\langle e _ { 1 } ^ { \prime } ( s(t) ) , e _ { 2 } ( s(t) ) \right\rangle=\frac{\left\langle \ddot{c}(t),R^{90^\circ}\dot{c}(t) \right\rangle}{|\dot{c}(t)|^3} $$
- 输入
- 控制点 control points:$\pmb{k}_0,\dots,\pmb{k}_n\in \mathbb{R}^3$
- 结序列 knot sequence:$t_0,\dots,t_n\in \mathbb{R},t_0<t_1<\dots<t_n$
- 输出:$\pmb{x}(t)\ (t_0\le t\le t_n)$,满足
$\pmb{x}(t_i)=\pmb{k}_i$
给定
-
$\pmb{y}(u)$ :$[0,1]$ 上的 Bezier 曲线 -
$\pmb{x}(u)$ :$[t_i,t_{i+1}]$ 上的 Bezier 曲线
令
则
根据控制点 ${\pmb{k}i}{i=0}^n$ 生成结序列
- 等距:$t_{i}-t_{i-1}=\text{const}\ (i=1,\dots,n)$
- Chordal:$t_{i}-t_{i-1}=d_i\ (i=1,\dots,n)$
- Centripetal:$t_{i}-t_{i-1}=\sqrt{d_i}\ (i=1,\dots,n)$
- Foley:$t_i-t_{i-1}=d_i\left(1+\frac{3}{2}\left(\frac{\hat{\alpha}id_i}{d_i+d{i+1}}+\frac{\hat{\alpha}{i-1}d{i-1}}{d_{i-1}+d_i}\right)\right)$,其中 $\hat{\alpha}i=\min\left(\pi-\alpha_i,\frac{\pi}{2}\right)$,$\alpha_i=\text{angle}\left(\pmb{k}{i-1},\pmb{k}{i},\pmb{k}{i+1}\right)$
给定两条曲线
$\pmb{x}_1(t),t\in[t_0,t_1]$ $\pmb{x}_2(t),t\in[t_1,t_2]$
$C^0$ :位置连续$C^1$ :接合处一阶导数(速度)连续$C^2$ :接合处一阶和二阶导数(加速度)连续
$G^0=C^0$ :位置连续$G^1$ :切向连续$G^2$ :切向和曲率连续
两条 n 阶 bezier 曲线
$$
\begin{align}
\pmb{k}_{j-1}=\pmb{b_0}^-,\pmb{b}_1^-,\dots,\pmb{b_n}^-=&\pmb{k}j\
&\pmb{k}{j}=\pmb{b_0}^+,\pmb{b}1^+,\dots,\pmb{b_n}^+=\pmb{k}{j+1}\
\end{align}
$$
- 一阶导相等
-
$C^1$ 连续 - 二阶导相等
$$ \frac { \boldsymbol { b } _ { n } ^ { - } - 2\boldsymbol { b } _ { n - 1 } ^ { - }+\boldsymbol{b}^-{n-2} } { \Delta{j-1}^2 } = \frac { \boldsymbol { b } _ { 2 } ^ { + } - 2\boldsymbol { b } _ { 1 } ^ { + } + \boldsymbol{b}^+_0 } { \Delta_j^2 } $$
-
$G_1$ 连续 - 五点
$\boldsymbol { b } _ { n - 2 } ^ { - } , \boldsymbol { b } _ { n - 1 } ^ { - } , \boldsymbol { k } _ { j } , \boldsymbol { b } _ { 1 } ^ { + } , \boldsymbol { b } _ { 2 } ^ { + }$ 共面 - 二阶导差值与切线平行
$\ddot{\pmb{x}}_2(t_i)-\ddot{\pmb{x}}_1(t_i)|\dot{\pmb{x}}(t_i)$ - 面积比
$\frac { \operatorname { area } \left( \boldsymbol { b } _ { n - 2 } ^ { - } , \boldsymbol { b } _ { n - 1 } ^ { - } , \boldsymbol { k } _ { j } \right) } { \operatorname { area } \left( \boldsymbol { k } _ { j } , \boldsymbol { b } _ { 1 } ^ { + } , \boldsymbol { b } _ { 2 } ^ { + } \right) } = \frac { a ^ { 3 } } { b ^ { 3 } }$
每个样条有四个顶点
$\pmb{b}_0,\pmb{b}_1,\pmb{b}_2,\pmb{b}_3$ ,因此是一个三次多项式,所以端点可以 2 阶连续
给定
- 控制点:$\pmb{k}_0,\dots,\pmb{k}_1\in\mathbb{R}^3$
- 结序列:$t _ { 0 } , \ldots , t _ { n } \in \mathbb { R }, t_0<t_1<\dots<t_n$
想要得到 Bezier 点 $\pmb{b}0,\dots,\pmb{b}{3n}$ 来插值
示例
有
- 插值条件
$\pmb{b}_{3i}=\pmb{k}_i(i=0,\dots,n)$ ,共$n+1$ 个方程 - 在
$\pmb{k}_i(i=1,\dots,n-1)$ 处$C^2$ 连续,则一阶导和二阶导相等,则共$2n-2$ 个方程
共
需要两个额外的条件,即端点条件
- Bessel 端点条件:$\pmb{k}_0$ 处一阶导等于插值
$\left{ \boldsymbol { k } _ { 0 } , \boldsymbol { k } _ { 1 } , \boldsymbol { k } _ { 2 } \right}$ 的抛物线在$\pmb{k}_0$ 处的一阶导,另一端也如此 - 自然端点条件:$\begin{array} { l } { \ddot { \pmb{x} } \left( t _ { 0 } \right) = 0 \Leftrightarrow \pmb{b} _ { 1 } = \frac { \pmb{b} _ { 2 } + \pmb{b} _ { 0 } } { 2 } } \ { \ddot { \pmb{x} } \left( t _ { n } \right) = 0 \Leftrightarrow \pmb{b} _ { 3 n - 1 } = \frac { \pmb{b} _ { 3 n - 2 } + \pmb{b} _ { 3 n } } { 2 } } \end{array}$
- 闭合:$\begin{array} { l } { \dot { \pmb{x} } \left( t _ { 0 } \right) = \dot { \pmb{x} } \left( t _ { n } \right) } \ { \ddot { \pmb{x} } \left( t _ { 0 } \right) = \ddot { \pmb{x} } \left( t _ { n } \right) } \end{array}$
参考 《样条函数与逼近论》9. B 样条及其性质 和 10. 样条函数的计算
B 样条
$\leftrightarrow$ Bernstein 基B 样条曲线
$\leftrightarrow$ Bezier 曲线B 样条曲线插值
$\leftrightarrow$ Bezier 样条
定义
给定结序列 ${t_i}{i=0}^{n+k}$,满足 $t_0<\dots<t{n+k}$,则 $$ \begin{aligned} N_{i,1}(t) &= \left{\begin{matrix} 1, &t_i \le t < t_{i+1} \ 0, &\text{otherwise} \ \end{matrix}\right. \ N_{i,r}(t) &= \frac{t-t_i}{t_{i+r-1}-t_i}N_{i,r-1}(t)+\frac{t_{i+r}-t}{t_{i+r}-t_{i+1}}N_{i+1,r-1}(t) \quad (r=2,\dots,k;i=0,\dots,n+k-r) \end{aligned} $$ 连续性
放宽条件
重复 1 次是指
$t_i=t_{i+1}$ ,重复 m 次是指$t_i=t_{i+1}=\dots=t_{i+m}$
规范性
每一段内会受到 k 个基函数的影响,首尾处小于 1
给定
- 控制点:$\pmb{d}_0,\dots,\pmb{d}_n\in \mathbb{R}^3$,$n+1$ 个,$\pmb{d}_i$ 称为 de Boor points
- 结向量:$T=(t_0,\dots,t_n,\dots,t_{n+k})$,$n+k+1$ 个,比控制点多 k 个
因为
$N_{n,k}$ 需要$t_n,t_{n+1},\dots,t_{n+k}$
则 k 阶的 B-spline 曲线
示例
当
-
$t\in[t_{k-1},t_{n+1}]$ ,总共$n-k+2$ 段(因此$n\ge k-1$ ) - $\pmb{x}(t_{k-1})=\pmb{d}0$,$\pmb{x}(t{n+1})=\pmb{d}_n$
$\dot{\pmb{x}}(t_0)=\frac{k-1}{t_k-t_{k-1}}(\pmb{d}_1-\pmb{d}_0)$ - 含 n-k+2 段多项式 k-1 阶的曲线,$C^{k-2}$ 连续
- 重复 m 次,则
$C^{k-m-2}$ 连续 - 移动 $\pmb{d}i$ 只影响 $[t_i,t{i+k}]$
-
$n=k-1$ 且$t_0=\dots=t_{k-1}=0,t_k=\dots=t_{2k-1}=1$ 时,B 样条为 Bezier 曲线(从[开花算法](##6.3 B 样条)易于理解)
示例
输入
- ${\pmb{d}0}{i=0}^n$
- ${t_i}{i=0}^{n+k}$,其中 $t_0=\dots=t{k-1}<t_k<\dots<t_{n}<t_{n+1}=\dots=t_{n+k}$
输出
k 阶 B-Spline 样条
算法
运算框架
输入
- 插值点:${\pmb{k}i}{i=0}^n$
- 结:${s_i}_{i=0}^n$
输出
4 阶 3 次 B 样条曲线
方法
- 3 次
$\Rightarrow k=4$ -
$n$ 段$[t_i,t_{i+1})$ $\Rightarrow$ $n+3$ 个 de Boor 点 ${\pmb{d}i}{i=0}^{n+2}$,$n+7$ 个结 ${t_i}{i=0}^{n+6}$,其中 $t_0=t_1=t_2=t_3,t{n+3}=t_{n+4}=t_{n+5}=t_{n+6},t_{i+3}=s_i\ (i=0,\dots,n)$,即 $\begin{array}{c} (t_0,&t_1,&t_2,&t_3,&t_4,&\dots,&t_{n+2},&t_{n+3},&t_{n+4},&t_{n+5},&t_{n+6}&)\ (s_0,&s_0,&s_0,&s_0,&s_1,&\dots,&s_{n-1},&s_n, &s_n, &s_n, &s_n &) \end{array}$
则条件有
$$
\begin{aligned}
\pmb{x} \left( s _ { 0 } \right) & = \pmb{k} _ { 0 } = \pmb{d} _ { 0 } \
\pmb{x} \left( s _ { i } \right) & = \pmb{k} _ { i } = N _ { i , 4 } \left( s _ { i } \right) \pmb{d} _ { i } + N _ { i + 1,4 } \left( s _ { i } \right) \pmb{d} _ { i + 1 } + N _ { i + 2,4 } \left( s _ { i } \right) \pmb{d} _ { i + 2 } \quad (i=1,\dots,n-1)\
\pmb{x} \left( s _ { n } \right) & = \pmb{k} _ { n } = \pmb{d} _ { n + 2 } \end{aligned}
$$
有
- 自然边界条件
可得到一个三对角系统 $$ \left[\begin{matrix} 1\ \alpha_0 & \beta_0 & \gamma_0\ & \alpha_1 & \beta_1 & \gamma_1\ & & & \cdot\ & & & & \cdot\ & & & & & \cdot\ & & & &\alpha_{n-1} & \beta_{n-1} & \gamma_{n-1}\ & & & & & \alpha_{n} & \beta_{n} & \gamma_{n}\ & & & & & & & 1\ \end{matrix}\right]
\left[\begin{matrix} \pmb{d}_0\ \pmb{d}_1\ \pmb{d}2\ \cdot\ \cdot\ \cdot\ \pmb{d}n\ \pmb{d}{n+1}\ \pmb{d}{n+2} \end{matrix}\right]
=
\left[\begin{matrix}
\pmb{k}_0\
0\
\pmb{k}1\
\cdot\
\cdot\
\cdot\
\pmb{k}{n-1}\
0\
\pmb{k}n\
\end{matrix}\right]
$$
其中
$$
\begin{aligned} \alpha _ { 0 } & = s _ { 2 } - s _ { 0 } \ \beta _ { 0 } & = - \left( s _ { 2 } - s _ { 0 } \right) - \left( s _ { 1 } - s _ { 0 } \right) \ \gamma _ { 0 } & = s _ { 1 } - s _ { 0 } \\
\alpha _ { n } & = s _ { n } - s _ { n - 1 } \ \beta _ { n } & = - \left( s _ { n } - s _ { n - 1 } \right) - \left( s _ { n } - s _ { n - 2 } \right) \ \gamma _ { n } & = s _ { n } - s _ { n - 2 } \\
\alpha _ { i } & = N{i,4}(s_i) \ \beta _ { i } & = N _ { i + 1,4 } \left( s _ { i } \right) \ \gamma _ { i } & = N _ { i + 2,4 } \left( s _ { i } \right) \ & \text { for } i = 1 , \ldots , n - 1 \end{aligned}
$$
使用 Thomas 算法,时间复杂度
$$ \left[ \begin{array} { c c c c c } { b _ { 1 } } & { c _ { 1 } } & { } & { } & { 0 } \ { a _ { 2 } } & { b _ { 2 } } & { c _ { 2 } } & { } & { } \ { } & { a _ { 3 } } & { b _ { 3 } } & { . } & { } \ { } & { } & { . } & { . } & { c _ { n - 1 } } \ { 0 } & { } & { } & { a _ { n } } & { b _ { n } } \end{array} \right] \left[ \begin{array} { c } { x _ { 1 } } \ { x _ { 2 } } \ { . } \ { . } \ { x _ { n } } \end{array} \right] = \left[ \begin{array} { c } { d _ { 1 } } \ { d _ { 2 } } \ { . } \ { . } \ { d _ { n } } \end{array} \right] $$ 前向消除步骤
后向替换步骤
给定
- 控制点:$\pmb{k}_0,\dots,\pmb{k}_n$
- 结序列:$t_0,\dots,t_n$
- 2 个端点条件
-
$C^2$ 连续、插值条件
从而得到 $\pmb{b}0,\dots,\pmb{b}{3n}$
现想得到相同曲线的 B-spline 形式
-
结向量
$T=(t_0,t_0,t_0,t_0,t_1,\dots,t_{n-1},t_n,t_n,t_n,t_n)$ 总共
$n+7$ 个顶点,则有$n+3$ 个 de Boor pionts,即 $\pmb{d}0,\dots,\pmb{d}{n+2}$ -
$\pmb{d}0,\dots,\pmb{d}{n+2}$ 满足 $$ \begin{aligned} \pmb{d} _ { 0 } & = \pmb{b} _ { 0 } \ \pmb{d} _ { 1 } & = \pmb{b} _ { 1 } \ \pmb{d} _ { i } & = \pmb{b} _ { 3 i - 4 } + \frac { \Delta _ { i - 1 } } { \Delta _ { i - 2 } } \left( \pmb{b} _ { 3 i - 4 } - \pmb{b} _ { 3 i - 5 } \right) \text { for } i = 2 , \ldots , n \ \pmb{d} _ { n + 1 } & = \pmb{b} _ { 3 n - 1 } \ \pmb{d} _ { n + 2 } & = \pmb{b} _ { 3 n } \end{aligned} $$ 其中
$\Delta_i= t_{i+1}-t_i,t=0,\dots,n-1$
示例
n 次多项式 polynomial
- 对角性 diagonality:$f(t,\dots,t)=F(t)$
- 对称性 symmetry:对任意置换
$\pi$ ,$f(t_1,\dots,t_d)=f(t_{\pi(1)},\dots,t_{\pi(d)})$ - 多仿射 multi-affine:$f(t_1,\dots,\sum_\limits{k=1}^n\alpha_kt_i^{(k)},\dots,t_d)=\sum_{k=1}^n\alpha_k f(t_1,\dots,t_i^{(k)},\dots,t_d)$,其中
$\sum_{k=1}^n\alpha_k=1$
示例
- 0 次:$f=c_0$
- 1 次:$f(t_1)=c_0+c_1t_1$
- 2 次:$f(t_1,t_2)=c_0+c_1\frac{t_1+t_2}{2} + c_2t_1t_2$
- 3 次:$f(t_1,t_2,t_3)=c_0+c_1\frac{t_1+t_2+t_3}{3}+c_2\frac{t_1t_2+t_2t_3+t_1t_3}{3}+c_3t_1t_2t_3$
两者都是只有
$n+1$ 个变量,即自由度为$n+1$ ,只需提供 n+1 个采样点即可确定函数
满足性质
- 对角性 diagonality:$f(\pmb{t},\dots,\pmb{t})=F(\pmb{t})$
- 对称性 symmetry:对任意置换
$\pi$ ,$f(\pmb{t}1,\dots,\pmb{t}d)=f(\pmb{t}{\pi(1)},\dots,\pmb{t}{\pi(d)})$ - 多仿射 multi-affine:$f(\pmb{t}1,\dots,\sum\limits{k=1}^n\alpha_k\pmb{t}_i^{(k)},\dots,\pmb{t}d)=\sum{k=1}^n\alpha_k f(\pmb{t}_1,\dots,\pmb{t}_i^{(k)},\dots,\pmb{t}d)$,其中 $\sum{k=1}^n\alpha_k=1$
我们需要区分点 point 和向量 vectors(点的差值)
使用“帽子”记号
1 向量:$\hat{1}=1-0,\hat{\pmb{1}}=[1,\dots,1]^\top-\pmb{0}$
极形式中向量的递归定义
$$
f(\underbrace{t_1,\dots,t_{n-k}}{n-k},\underbrace{\hat{v}1,\dots,\hat{v}k}k)=
f(\underbrace{t_1,\dots,t{n-k}}{n-k},p_1,\underbrace{\hat{v}2,\dots,\hat{v}{k-1}}{k-1})-f(\underbrace{t_1,\dots,t{n-k}}{n-k},q_1,\underbrace{\hat{v}2,\dots,\hat{v}{k-1}}{k-1})
$$
其中
其中
下列等价
-
$F$ 和$G$ 在$t$ 点$\mathrm{C}^k$ 连续 $\forall t_1,\dots,t_k, f(t,\dots,t,t_1,\dots,t_k)=g(t,\dots,t,t_1,\dots,t_k)$ $f ( t , \ldots , t , \underbrace{\hat { 1 } , \ldots , \hat { 1 }}_r ) = g ( t , \ldots , t , \underbrace{\hat { 1 } , \ldots , \hat { 1 }}_r )\quad(r=1,\dots,k)$
给定 d 次函数
证明
$F^{(+1)}(t)=F(t)$ $$ \begin{aligned} \forall t : f ^ { ( + 1 ) } ( t , \ldots , t ) & = \left. \frac { 1 } { d + 1 } \sum _ { i = 1 } ^ { d + 1 } f \left( t _ { 1 } , \ldots , t _ { i - 1 } , t _ { i + 1 } , \ldots , t _ { d + 1 } \right) \right| _ { t _ { 1 } = \cdots t _ { d + 1 } = t } \ & = \frac { 1 } { d + 1 } \sum _ { i = 1 } ^ { d + 1 } f ( t , \ldots , t ) \ & = f ( t , \ldots , t ) \end{aligned} $$
n 阶 Bezier 曲线 $\pmb{x}(t)=\sum_{i=0}^nB^n_i(t)\pmb{b}i\ (0\le t\le 1)$,则极形式为 $$ f(t,\dots,t)=\sum{i=0}^nB^n_i(t)f (\underbrace{0,\dots,0}_{n-i},\underbrace{1,\dots,1}i) $$ 其中 $f (\underbrace{0,\dots,0}{n-i},\underbrace{1,\dots,1}_i)=\pmb{b}_i$
初始化:$\pmb{b}^{0}_i(t)=\pmb{b}i=f (\underbrace{0,\dots,0}{n-i},\underbrace{1,\dots,1}_i),\ (i=0,\dots,n)$
迭代:$\pmb{b}^{r}i(t)=(1-t)\pmb{b}^{r-1}i(t)+t\pmb{b}^{r-1}{i+1}(t)=f(\underbrace{0,\dots,0}{n-i-r},\underbrace{1,\dots,1}{i},\underbrace{t,\dots,t}{r})\ (r=1,\dots,n;i=0,\dots,n-r)$
运算框架
给定 n 次多项式
解决方法
$\pmb{p}(t)\mapsto \pmb{b}(t_1,\dots,t_n)$ - 控制点 $\pmb{b}i=\pmb{b}(\underbrace{0,\dots,0}{n-i},\underbrace{1,\dots,1}_i)$,$i=0,\dots,n$
控制点:${\pmb{k}i}{i=0}^n$
结序列:${t_i}_{i=0}^n$
求得 Bezier 点为 ${\pmb{b}i}{i=0}^{3n}$,有
示例
在 [6.1.6 升阶](##6.1.6 升阶) 介绍了极形式的升阶,则对 Bezier 曲线极形式
-
当
$i=1,\dots,d$ 时 $$ \begin{aligned} \pmb{b}i^{(+1)}&=\pmb{b}^{(+1)}(\underbrace{0,\dots,0}{n+1-i},\underbrace{1,\dots,1}i)\ &=\frac{i}{n+1}\pmb{b}(\underbrace{0,\dots,0}{n+1-i},\underbrace{1,\dots,1}{i-1}) + \left(1-\frac{i}{n+1}\right)\pmb{b}(\underbrace{0,\dots,0}{n-i},\underbrace{1,\dots,1}i)\ &=\frac{i}{n+1}\pmb{b}{i-1} + \left(1-\frac{i}{n+1}\right)\pmb{b}_i\\end{aligned} $$ -
其他 $$ \begin{aligned} \pmb{b}_0^{(+1)}&=\pmb{b}0\ \pmb{b}{n+1}^{(+1)}&=\pmb{b}_n\ \end{aligned} $$
将 $\pmb{b}{-1}$ 和 $\pmb{b}{n+1}$ 视为
$\pmb{0}$ 的话可以并入上边的公式
${\pmb{d}i}{i=0}^n$,${t_i}{i=0}^{n+k}$,极形式 $\underline{\pmb{x}}(\tau_1,\dots,\tau{k-1})$,范围
求
最终曲线是 $$ \pmb{x}(t)=\pmb{x}0^{(k-1)}(t)=\underline{\pmb{x}}(\underbrace{t,\dots,t}{k-1}) $$
运算框架
二次曲线是二次方程(任意维数)的零集
$$
{\pmb{x}\in \mathbb{R}^d|\pmb{x}^\top M \pmb{x}+\pmb{b}^\top \pmb{x}+\pmb{c}=0}
$$
圆锥曲线是
- 椭圆:$b^2<4ac$
- 圆:$b=0$,$a=c$
- 抛物线:$b^2=4ac$
- 双曲线:$b^2>4ac$
给定一条空间二次曲线,将
空间二次曲线为 $$ \pmb{f} ^ { ( h o m ) } ( t ) = \pmb{p} _ { 0 } + t \pmb{p} _ { 1 } + t ^ { 2 } \pmb{p} _ { 2 } = \left( \begin{array} { c } { \pmb{p} _ { 0 } \cdot x } \ { \pmb{p} _ { 0 } \cdot y } \ { \pmb{p} _ { 0 } \cdot \omega } \end{array} \right) + t \left( \begin{array} { c } { \pmb{p} _ { 1 } \cdot x } \ { \pmb{p} _ { 1 } \cdot y } \ { \pmb{p} _ { 1 } \cdot \omega } \end{array} \right) + t ^ { 2 } \left( \begin{array} { c } { \pmb{p} _ { 2 } \cdot x } \ { \pmb{p} _ { 2 } \cdot y } \ { \pmb{p} _ { 2 } \cdot \omega } \end{array} \right) $$
投影曲线 $$ \pmb{f} ^ { ( e u c l ) } ( t ) = \frac { \left( \begin{array} { c } { \pmb{p} _ { 0 } \cdot x } \ { \pmb{p} _ { 0 } \cdot y } \end{array} \right) + t \left( \begin{array} { c } { \pmb{p} _ { 1 } \cdot x } \ { \pmb{p} _ { 1 } \cdot y } \end{array} \right) + t ^ { 2 } \left( \begin{array} { c } { \pmb{p} _ { 2 } \cdot x } \ { \pmb{p} _ { 2 } \cdot y } \end{array} \right) } { \pmb{p} _ { 0 } \cdot \omega + t \pmb{p} _ { 1 } \cdot \omega + t ^ { 2 } \pmb{p} _ { 2 } \cdot \omega } $$
对于 $$ y=x^2 $$ 参数化为 $$ \left{\begin{array}{l} x=t\ y=t^2 \end{array}\right. $$ 则 $$ \pmb{p}_0=\left[\begin{matrix} 0\ 0\ 1 \end{matrix}\right], \pmb{p}_1=\left[\begin{matrix} 1\ 0\ 0 \end{matrix}\right], \pmb{p}_2=\left[\begin{matrix} 0\ 1\ 0 \end{matrix}\right] $$ 故 $$ \pmb{f} ^ { ( e u c l ) } ( t ) = \frac { \left( \begin{array} { c } { 0 } \ { 0 } \end{array} \right) + t \left( \begin{array} { c } { 1 } \ { 0 } \end{array} \right) + t ^ { 2 } \left( \begin{array} { c } { 0 } \ { 1 } \end{array} \right) } { 1 + 0 t + 0 t ^ { 2 } }=\left( \begin{array} { c } { t } \ { t^2 } \ { 1 } \end{array} \right) $$
对于
$$
x^2+y^2=1
$$
参数化为
$$
\left{\begin{array}{l}
x=\cos\varphi=\frac{1-\tan^2\frac{\varphi}{2}}{1+\tan^2\frac{\varphi}{2}}=\frac{1-t^2}{1+t^2}\
y=\sin\varphi=\frac{2\tan\frac{\varphi}{2}}{1+\tan^2\frac{\varphi}{2}}=\frac{2t}{1+t^2}\
\end{array}\right.
$$
其中
则 $$ \pmb{p}_0=\left[\begin{matrix} 1\ 0\ 1 \end{matrix}\right], \pmb{p}_1=\left[\begin{matrix} 0\ 2\ 0 \end{matrix}\right], \pmb{p}_2=\left[\begin{matrix} -1\ 0\ 1 \end{matrix}\right] $$ 故 $$ \pmb{f} ^ { ( e u c l ) } ( t ) = \frac { \left( \begin{array} { c } { 1 } \ { 0 } \end{array} \right) + t \left( \begin{array} { c } { 0 } \ { 2 } \end{array} \right) + t ^ { 2 } \left( \begin{array} { c } { -1 } \ { 0 } \end{array} \right) } { 1 + 0 t + 1 t ^ { 2 } }=\left( \begin{array} { c } { 1-t^2 } \ { 2t } \ { 1+t^2 } \end{array} \right) $$
对于
$$
x^2-y^2=1
$$
参数化为
$$
\left{\begin{array}{l}
x=\frac{1}{\cos\varphi}=\frac{1+t^2}{1-t^2}\
y=\tan \varphi = \frac{2t}{1-t^2}
\end{array}\right.
$$
其中
则 $$ \pmb{p}_0=\left[\begin{matrix} 1\ 0\ 1 \end{matrix}\right], \pmb{p}_1=\left[\begin{matrix} 0\ 2\ 0 \end{matrix}\right], \pmb{p}_2=\left[\begin{matrix} 1\ 0\ -1 \end{matrix}\right] $$ 故 $$ \pmb{f} ^ { ( e u c l ) } ( t ) = \frac { \left( \begin{array} { c } { 1 } \ { 0 } \end{array} \right) + t \left( \begin{array} { c } { 0 } \ { 2 } \end{array} \right) + t ^ { 2 } \left( \begin{array} { c } { 1 } \ { 0 } \end{array} \right) } { 1 + 0 t - 1 t ^ { 2 } }=\left( \begin{array} { c } { 1+t^2 } \ { 2t } \ { 1-t^2 } \end{array} \right) $$
齐次形式
${\pmb{b}i\in\mathbb{R}^{d+1}}{i=0}^n$,则 $$ \begin{aligned} \boldsymbol { f } ^ { ( h o m ) } ( t ) &= \sum _ { i = 0 } ^ { n } B _ { i } ^ { n } ( t ) \boldsymbol { b } _ { i }\ \boldsymbol { f } ^ { ( e u c l ) } ( t ) &= \frac { \sum _ { i = 0 } ^ { n } B _ { i } ^ { n } ( t ) \left( \begin{array} { c } { b _ { i } ^ { ( 1 ) } } \ { \vdots } \ { b_ { i } ^ { ( d ) } } \end{array} \right) } { \sum _ { i = 0 } ^ { n } B _ { i } ^ { n } ( t ) b _ { i } ^ { ( d + 1 ) } } \end{aligned} $$ 权系数形式
${\pmb{b}i\in \mathbb{R}^{d}}$,${w_i}{i=0}^n\ (\omega_i > 0)$,则
$$
\boldsymbol { f } ^ { ( e u c l ) } ( t ) = \frac { \sum _ { i = 0 } ^ { n } B _ { i } ^ { n } ( t ) w_i\pmb{b}i } { \sum _ { i = 0 } ^ { n } B _ { i } ^ { n } ( t ) w_i }=\sum{i=0}^nq_i(t)\pmb{b}_i
$$
相对于齐次形式,无法表达
易得
则 $$ f^\prime(t)=\frac{p^\prime(t)-f(t)w^\prime(t)}{w(t)} $$
三种方法
-
在
$d+1$ 维上计算,最后投影:$\boldsymbol { b } _ { i } ^ { ( r ) } ( t ) = ( 1 - t ) \boldsymbol { b } _ { i } ^ { ( r - 1 ) } ( t ) + t \boldsymbol { b } _ { i + 1 } ^ { ( r - 1 ) } ( t )$ -
分别计算分子和分母,然后相除:类似于上一种
-
每一个步骤相除 $$ \begin{aligned} \boldsymbol { b } _ { i } ^ { ( r ) } ( t ) = ( & 1 - t ) \frac { \omega _ { i } ^ { ( r - 1 ) } ( t ) } { \omega _ { i } ^ { ( r ) } ( t ) } \boldsymbol { b } _ { i } ^ { ( r - 1 ) } ( t ) + t \frac { \omega _ { i + 1 } ^ { ( r - 1 ) } ( t ) } { \omega _ { i } ^ { ( r ) } ( t ) } \boldsymbol { b } _ { i + 1 } ^ { ( r - 1 ) } ( t ) \ & \text { with } \quad \omega _ { i } ^ { ( r ) } ( t ) = ( 1 - t ) \omega _ { i } ^ { ( r - 1 ) } ( t ) + t \omega _ { i + 1 } ^ { ( r - 1 ) } ( t ) \end{aligned} $$
这种方法很傻其实,每次除了权重之后,下一次又乘了回去
综合来看第一种最简单
权重三个,绝对大小无关且参数化无关可消掉两个,故只剩一个
取权重 $$ w_0=w_2=1,\ w_1=w $$ 则 $$ f ^ { ( e u c l ) } ( t )=\frac { B_0^{(2)}(t)\boldsymbol { p } _ { 0 } + B_1^{(2)}(t) \omega \boldsymbol { p } _ { 1 } + B_2^{(2)}(t) \boldsymbol { p } _ { 2 } } { B_0^{(2)}(t) + B_1^{(2)}(t) \omega + B_2^{(2)}(t) } $$
-
$\omega < 1$ :椭圆曲线 -
$\omega=1$ :抛物线 -
$\omega>1$ :双曲线
对偶段为
代入标准形式可得 $$ \begin{aligned} \pmb{x}(\hat{t})&= \frac { ( 1 - \hat { t } ) ^ { 2 } \pmb{p} _ { 0 } + 2 \hat { t } ( 1 - \hat { t } ) \omega \pmb{p} _ { 1 } + \hat { t } ^ { 2 } \pmb{p} _ { 2 } } { ( 1 - \hat { t } ) ^ { 2 } + 2 \hat { t } ( 1 - \hat { t } ) \omega + \hat { t } ^ { 2 } }\ &= \frac { ( 1 - t ) ^ { 2 } \pmb{p} _ { 0 } - 2 t ( 1 - t ) \omega \pmb{p} _ { 1 } + t ^ { 2 } \pmb{p} _ { 2 } } { ( 1 - t ) ^ { 2 } - 2 t ( 1 - t ) \omega + t ^ { 2 } }\ &= \frac{B^2_0(t)\pmb{p}_0-B^2_1(t)\omega\pmb{p}_1+B^2_2(t)\pmb{p}_2}{B^2_0(t)-B^2_1(t)\omega+B^2_2(t)} \end{aligned} $$
仅是
考虑分母等于
这是一个抛物线,可推得
-
$\omega<1$ :没有奇异点(零点),椭圆 -
$\omega=1$ :一个奇异点,抛物线 -
$\omega>1$ :两个奇异点,双曲线
控制点满足
$|\pmb{b}_1-\pmb{b}_0|=|\pmb{b}_1-\pmb{b}_2|$ $\text{dot}(\pmb{b_1}-\pmb{b_0},\pmb{b_2}-\pmb{b_0})=\text{dot}(\pmb{b_1}-\pmb{b_2},\pmb{b_0}-\pmb{b_2})=\cos\alpha$
则
$$ \begin{aligned} \overline{\pmb{f}i} &=\frac{1}{2}(\overline{\pmb{b}i}+\overline{\pmb{b}{i+1}})\ \pmb{f}i&=\frac{\omega_ib_i+\omega{i+1}b{i+1}}{\omega_i+\omega_{i+1}} \end{aligned} $$
Non-Uniform Rational B-Splines $$ \boldsymbol { f } ( t ) = \frac { \sum _ { i = 0 } ^ { n } N _ { i,k } ( t ) \omega _ { i } \boldsymbol { p } _ { i } } { \sum _ { i = 0 } ^ { n } N _ { i,k } ( t ) \omega _ { i } } $$
$B^{(\text{curv})}={b_i(t)}{i=0}^n$,$B^{(\text{surf})}={b{ij}(u,v)=b_i(u)b_j(v)}{i,j=0}^n$,${\pmb{p}{i,j}}{i,j=0}^n$,张量积曲面为 $$ \begin{aligned} \boldsymbol { f } ( u , v ) & = \sum _ { i = 0 } ^ { n } \sum _ { j = 0 } ^ { n } b _ { i } ( u ) b _ { j } ( v ) \boldsymbol { p } _ { i , j } \ & = \sum _ { i = 0 } ^ { n } b _ { i } ( u ) \sum _ { j = 0 } ^ { n } b _ { j } ( v ) \boldsymbol { p } _ { i , j } \ & = \sum _ { j = 0 } ^ { n } b _ { j } ( v ) \sum _ { i = 0 } ^ { n } b _ { i } ( u ) \boldsymbol { p } _ { i , j } \end{aligned} $$ $\sum{i=0}^n b_i(t)=1 \Rightarrow$ 仿射不变性、凸包性 $$ \begin{aligned} \frac { \partial ^ { r + s } } { \partial u ^ { r } \partial v ^ { s } } \sum _ { i = 0 } ^ { n } \sum _ { j = 0 } ^ { n } b _ { i } ( u ) b _ { j } ( v ) \boldsymbol { p } _ { i , j } & = \sum _ { i = 0 } ^ { n } \sum _ { j = 0 } ^ { n } b_i^{(r)}(u) b_j^{(s)}(v) \boldsymbol { p } _ { i , j }\ & = \sum _ { j = 0 } ^ { n } b_i^{(r)}(u) \sum _ { i = 0 } ^ { n } b_j^{(s)}(v) \boldsymbol { p } _ { i , j } \ & = \sum _ { i = 0 } ^ { n } b_i^{(r)}(u) \sum _ { j = 0 } ^ { n } b_j^{(s)}(v) \boldsymbol { p } _ { i , j }\ & = \frac { \mathrm{d} ^ { r } } { \mathrm{d} u ^ { r } } \sum_{i=0}^nb_i(u)\frac { \mathrm{d} ^ { s } } { \mathrm{d} v ^ { s } } \sum_{j=0}^nb_j(v) \pmb{p}_{i,j} \end{aligned} $$
控制点阵 ${\pmb{b}{i,j}}{i,j=0}^{n,m}$,则张量积 Bezier 块为 $$ \boldsymbol { f } ( u , v ) = \sum _ { i = 0 } ^ { n } \sum _ { j = 0 } ^ { m } B _ { i } ^ { n } ( u ) B _ { j } ^ { m } ( v ) \boldsymbol { b } _ { i , j } $$
$$ \begin{aligned} \frac { \partial ^ { r + s } } { \partial u ^ { r } \partial v ^ { s } }\pmb{f}(u,v) &= \frac { \mathrm{d} ^ { r } } { \mathrm{d} u ^ { r } } \sum_{i=0}^n B^n_i(u)\frac { \mathrm{d} ^ { s } } { \mathrm{d} v ^ { s } } \sum_{j=0}^m B^m_j(v) \pmb{b}{i,j}\ &= c{n,r}c_{m,s}\sum_{i=0}^{n-r}B^{n-r}i(u)\sum{j=0}^{m-s}B^{m-s}j(v)\Delta^r_i\Delta^s_j\pmb{b}{i,j}\ &= c_{n,r}c_{m,s}\sum_{j=0}^{m-s}B^{m-s}j(v)\sum{i=0}^{n-r}B^{n-r}i(u)\Delta^s_j\Delta^r_i\pmb{b}{i,j} \end{aligned} $$
其中 $\Delta^k_i f_i=\sum_{j=0}^k\mathrm{C}k^j(-1)^jf{i+k-j}$,$c_{n,k}=\prod_{i=1}^k(n-i+1)$
边界导数 $$ \begin{aligned} \left.\frac{\part}{\part u}\pmb{f}(u,v)\right|{u=0}&=n\sum{j=0}^m B^m_j(v)(\pmb{b}{1,j}-\pmb{b}{0,j})\ \left.\frac{\part}{\part u}\pmb{f}(u,v)\right|{u=1}&=n\sum{j=0}^m B^m_j(v)(\pmb{b}{n,j}-\pmb{b}{n-1,j})\ \left.\frac{\part}{\part v}\pmb{f}(u,v)\right|{v=0}&=m\sum{j=0}^n B^n_j(v)(\pmb{b}{i,1}-\pmb{b}{i,0})\ \left.\frac{\part}{\part v}\pmb{f}(u,v)\right|{v=1}&=m\sum{j=0}^n B^n_j(v)(\pmb{b}{i,n}-\pmb{b}{i,n-1})\ \end{aligned} $$
-
$C^0$ 连续:块边界重合 -
$C^1$ 连续:边界差向量相等
极形式
- 对角:$f(u,\dots,u;v,\dots,v)=\pmb{f}(u,v)$
- 对称:$f(u_1,\dots,u_n;v_1,\dots,v_m)=f(u_{\pi(1)},\dots,u_{\pi(n)};v_{\mu(1)},\dots,v_{\mu(m)})$
- 仿射:$\sum_k\alpha_k=1$
控制点阵 ${\pmb{b}{i,j}}{i,j=0}^{n}$,权重阵 ${w_{i,j}}{i,j=0}^{n}$,则有理 Bezier 样条曲面块 $$ \pmb{f}(u,v)=\frac{\sum{i=0}^n\sum_{j=0}^n B^n_i(u)B^n_j(v)w_{i,j}\pmb{b}{i,j}}{\sum{i=0}^n\sum_{j=0}^n B^n_i(u)B^n_j(v)w_{i,j}} $$
考虑
连续性
考虑 2D 情形
-
$C^0$ $$ \begin{aligned} \pmb{f}(b,b) &= \pmb{g}(b,b)\ \pmb{f}(b,c) &= \pmb{g}(b,c)\ \pmb{f}(c,c) &= \pmb{g}(c,c)\ \end{aligned} $$ -
$C^1$ $$ \begin{aligned} \pmb{f} ( a , b ) & = \pmb{g} ( a , b ) \ \pmb{f} ( b , d ) & = \pmb{g} ( b , d ) \ \pmb{f} ( a , c ) & = \pmb{g} ( a , c ) \ \pmb{f} ( c , d ) & = \pmb{g} ( c , d ) \end{aligned} $$
- 各边插入中点
- 各边用中点替代
示例
相当于:对每条边,插入
每次迭代点数加倍,写成矩阵的形式
$$
\left[\begin{matrix}
\vdots\
p^{k+1}{2i-2}\
p^{k+1}{2i-2}\
p^{k+1}{2i-2}\
p^{k+1}{2i-2}\
p^{k+1}{2i-2}\
p^{k+1}{2i-2}\
\vdots
\end{matrix}\right]{2n\times 1}
=\frac{1}{4}
\left[\begin{matrix}
\ddots\
& 3 & 1 & 0 & 0\
& 1 & 3 & 0 & 0\
& 0 & 3 & 1 & 0\
& 0 & 1 & 3 & 0\
& 0 & 0 & 3 & 1\
& 0 & 0 & 1 & 3\
& & & & &\ddots\
\end{matrix}\right]{2n\times n}
\left[\begin{matrix}
\vdots\
p^{k+1}{i-1}\
p^{k+1}{i}\
p^{k+1}{i+1}\
p^{k+1}{i+2}\
\vdots\
\end{matrix}\right]_{n\times 1}
$$
极限是 3 阶 2 次
核为 $h_i=\frac{1}{4}[\underbrace{0,\dots,0}{2i},1,3,3,1,\underbrace{0,\dots,0}{2n-2i-4}]$
Lane-Riesenfeld subdivision 算法
- 各边加中点
- 将每条边用中点替代,重复
$d$ 次
示例
$d=2$
极限是
核 $$ h_i=\frac{1}{2^{d+1}}[\underbrace{0,\dots,0}{2i},\mathrm{C}{d+2}^0,\dots,\mathrm{C}{d+2}^{d+2},\underbrace{0,\dots,0}{2n-2i-d-3}] $$
局部迭代矩阵
仿射不变性要求局部迭代矩阵行和为 1,这意味着
规则闭合四边形网格
划分 (删去旧顶点)
平均
任意闭合四边形网格
划分(删去旧顶点)
可微分函数
-
$f$ 应该可微分,定义域在$\mathbb{R}^3$ 中 - 梯度不消失
类型
- 一般:在 0 值附近梯度非零
- 符号:内负外正,实体造型
- 符号距离:$|f(\pmb{x})|$ 为
$\pmb{x}$ 到曲面的距离,内负外正,常数模长 1($|\nabla f(\pmb{x})|=1$),中轴不可微 - 平方距离:$f(\pmb{x})$ 为
$\pmb{x}$ 到曲面的平方距离,最小二次优化,适合噪声
平均曲率
体积积分
- 均匀,带
- 自适应 / 层级
粒子
施力
- 到曲面
- 分散
两个符号隐式函数
初始数据点
法向估计
符号距离函数
Marching Cubes
最终网格