Please enable Javascript to view the contents

计算机辅助几何设计(6):样条曲面

 ·  ☕ 11 分钟

1. 样条曲面简介

image-20220103214623870

当输入为一维时,将得到曲线,而将输入变为二维时,则可以得到曲面输出

1.1. 参数样条曲面

image-20220103214742432

  • 两个参数坐标$(u,v)$
  • 分段双变量多项式
  • 多片合成连续的完整一片
  • 每个片元称为样条块Spline Patch

有两种方法进行建模:

  1. 张量积曲面Tensor Product Surface
  2. 全度曲面Total Degree Surface

1.2. 张量积曲面

image-20220103215041774

  • 构造简单
  • 与曲线的情况类似
  • 四边形块Quad Patch
  • 度数各向异性

1.3. 全度曲面

image-20220103215207183

  • 不够直接,可借助极形式进行理解
  • 度数各向同性
  • 三角形块Triangle Patch
  • 曲线的自然泛化

2. 张量积曲面 Tensor Product Surface

2.1. 基本思想

给定一个$n$维基函数空间
$$
\pmb B^{(curv)}:=\{b_1(t),\cdots,b_n(t)\}
$$
其中,$b_i(t):t\in[t_0,t_1]\rightarrow \mathbb R^d$

构建一个双参数基函数空间:
$$
\pmb{B}^{(surf)}=\{b_i(u)b_j(v)\}_{i,j=1}^n
$$

示例:

张量积基函数:

image-20220103215949318

对于单项式基$b_i(t)=t^{i-1}$,有

image-20220103220040721

张量积曲面定义为:
$$
\begin{aligned} \boldsymbol { f } ( u , v ) & = \sum _ { i = 1 } ^ { n } \sum _ { j = 1 } ^ { n } b _ { i } ( u ) b _ { j } ( v ) \boldsymbol { p } _ { i , j } \\\\ & = \sum _ { i = 1 } ^ { n } b _ { i } ( u ) \sum _ { j = 1 } ^ { n } b _ { j } ( v ) \boldsymbol { p } _ { i , j } \\\\ & = \sum _ { j = 1 } ^ { n } b _ { j } ( v ) \sum _ { i = 1 } ^ { n } b _ { i } ( u ) \boldsymbol { p } _ { i , j } \end{aligned}
$$
image-20220103220203656

  • ”曲线的曲线“
  • 顺序无关性

基本性质:

  • 线性不变性
  • 当$\sum_{i=1}^n b_i(t)=1$时,具有仿射不变性
  • 当$b_i(t)\ge 0$时,具有凸包性

偏导:
$$
\begin{aligned} \frac { \partial ^ { r + s } } { \partial u ^ { r } \partial v ^ { s } } \sum _ { i = 1 } ^ { n } \sum _ { j = 1 } ^ { n } b _ { i } ( u ) b _ { j } ( v ) \boldsymbol { p } _ { i , j } & = \sum _ { j = 1 } ^ { n } \left( \frac { d ^ { s } } { d v ^ { s } } b _ { i } \right) ( v ) \sum _ { i = 1 } ^ { n } \left( \frac { d ^ { r } } { d u ^ { r } } b _ { i } \right) ( u ) \boldsymbol { p } _ { i , j } \\\\ & = \sum _ { i = 1 } ^ { n } \left( \frac { d ^ { r } } { d u ^ { r } } b _ { i } \right) ( u ) \sum _ { j = 1 } ^ { n } \left( \frac { d ^ { s } } { d v ^ { s } } b _ { j } \right) ( v ) \boldsymbol { p } _ { i , j } \end{aligned}
$$
法向量:
$$
\pmb n(u,v)=\frac{\dfrac{\partial \pmb f}{\partial u}\times\dfrac{\partial \pmb f}{\partial v}}{\left\|\dfrac{\partial \pmb f}{\partial u}\times\dfrac{\partial \pmb f}{\partial v}\right\|}
$$

2.2. 张量积Bézier曲面

2.2.1. 线性插值曲面

双线性曲面

image-20220103222203963
$$
\begin{aligned}
\pmb{h}_ 0 &= (1-u)\pmb{b}_ {00}+u\pmb{b}_ {10}\\\\
\pmb{h}_ 1 &= (1-u)\pmb{b}_ {01}+u\pmb{b}_ {11}
\end{aligned}
$$
故有:
$$
\begin{aligned}
\pmb{x}(u,v) &= (1-v)\pmb{h}_0 + v\pmb{h}_1\\\\
&= (1-v)((1-u)\pmb{b}_ {00}+u\pmb{b}_ {10}) + v((1-u)\pmb{b}_ {01}+u\pmb{b}_ {11})\\\\
&= ( 1 - u ) ( 1 - v ) \boldsymbol { b } _ { 00 } + u ( 1 - v ) \boldsymbol { b } _ { 10 } + ( 1 - u ) v \boldsymbol { b } _ { 01 } + u v \boldsymbol { b } _ { 11 }
\end{aligned}
$$
双线性曲面的导数:
$$
\begin{array} { l } { x _ { u } ( u , v ) = ( 1 - v ) \left( \boldsymbol { b } _ { 10 } - \boldsymbol { b } _ { 00 } \right) + v \left( \boldsymbol { b } _ { 11 } - \boldsymbol { b } _ { 01 } \right) } \\\\ { x _ { v } ( u , v ) = ( 1 - u ) \left( \boldsymbol { b } _ { 01 } - \boldsymbol { b } _ { 00 } \right) + u \left( \boldsymbol { b } _ { 11 } - \boldsymbol { b } _ { 10 } \right) } \\\\ { x _ { u u } ( u , v ) = x _ { v v } ( u , v ) = 0 } \\\\ { x _ { u v } ( u , v ) = x _ { v u } ( u , v ) = \boldsymbol { b } _ { 00 } - \boldsymbol { b } _ { 10 } - \boldsymbol { b } _ { 01 } + \boldsymbol { b } _ { 11 } } \end{array}
$$

双三次曲面

image-20220103222710822
$$
\begin{array} { l } { \boldsymbol { b } _ { 00 } ^ { 1 } = ( 1 - u ) ( 1 - v ) \boldsymbol { b } _ { 00 } + u ( 1 - v ) \boldsymbol { b } _ { 10 } + ( 1 - u ) v \boldsymbol { b } _ { 01 } + u v \boldsymbol { b } _ { 11 } } \\\\ { \boldsymbol { b } _ { 10 } ^ { 1 } = ( 1 - u ) ( 1 - v ) \boldsymbol { b } _ { 10 } + u ( 1 - v ) \boldsymbol { b } _ { 20 } + ( 1 - u ) v \boldsymbol { b } _ { 11 } + u v \boldsymbol { b } _ { 21 } } \\\\ { \boldsymbol { b } _ { 01 } ^ { 1 } = ( 1 - u ) ( 1 - v ) \boldsymbol { b } _ { 01 } + u ( 1 - v ) \boldsymbol { b } _ { 11 } + ( 1 - u ) v \boldsymbol { b } _ { 02 } + u v \boldsymbol { b } _ { 12 } } \\\\ { \boldsymbol { b } _ { 11 } ^ { 1 } = ( 1 - u ) ( 1 - v ) \boldsymbol { b } _ { 11 } + u ( 1 - v ) \boldsymbol { b } _ { 21 } + ( 1 - u ) v \boldsymbol { b } _ { 12 } + u v \boldsymbol { b } _ { 22 } } \end{array}
$$
又有:
$$
\begin{aligned} { \pmb{x} ( u , v ) } &{ = ( 1 - u ) ( 1 - v ) \boldsymbol { b } _ { 00 } ^ { 1 } + u ( 1 - v ) \boldsymbol { b } _ { 10 } ^ { 1 } + ( 1 - u ) v \boldsymbol { b } _ { 01 } ^ { 1 } + u v \boldsymbol { b } _ { 11 } ^ { 1 } } \\\\ &{ = \sum _ { i = 0 } ^ { 2 } \sum _ { j = 0 } ^ { 2 } B _ { i } ^ { 2 } ( u ) B _ { j } ^ { 2 } ( v ) \boldsymbol { b } _ { i , j } } \end{aligned}
$$

2.2.2. Bézier块

使用Bernstein张量积作为基函数:
$$
\boldsymbol { f } ( u , v ) = \sum _ { i = 0 } ^ { d } \sum _ { j = 0 } ^ { d } B _ { i } ^ { ( d ) } ( u ) B _ { j } ^ { ( d ) } ( v ) \boldsymbol { p } _ { i , j }
$$
性质:

  • 仿射不变性
  • 凸包性
  • 端点插值
  • 边界曲线为边界控制点生成的Bézier曲线

边界的切向量:
$$
\begin{aligned} \left. \frac { \partial } { \partial u } f ( u , v ) \right| _ { u = 0 } & = \sum _ { i = 0 } ^ { d } \sum _ { j = 0 } ^ { d } B _ { i } ^ { ( d ) } ( v ) B _ { j } ^ { \prime } ( 0 ) \boldsymbol { p } _ { i , j } \\\\ & = d \sum _ { j = 0 } ^ { d } B _ { j } ^ { ( d ) } ( v ) \left( \boldsymbol { p } _ { 1 , j } - \boldsymbol { p } _ { 0 , j } \right) \\\\ \left. \frac { \partial } { \partial u } \boldsymbol { f } ( u , v ) \right| _ { u = 1 } & = d \sum _ { j = 0 } ^ { d } B _ { j } ^ { ( d ) } ( v ) \left( \boldsymbol { p } _ { d , j } - \boldsymbol { p } _ { d - 1 , j } \right) \end{aligned}
$$

2.2.3. 连续性

  • $C^0$:边界控制点匹配

    image-20220103223450420

  • $C^1$:边界差值向量匹配

    image-20220103223606316

2.2.4. 极形式

曲面函数 $F$ 和极形式 $\pmb{f}$ 分别为:
$$
\begin{array}{ll}
F:\mathbb{R}\times \mathbb{R} \to \mathbb{R}^n & F(u,v)\\\\
\pmb{f}:\mathbb{R}^d\times \mathbb{R}^d \to \mathbb{R}^n
\end{array}
$$
性质:

  • 对角性:$\pmb{f}(u,\dots,u;v,\dots,v)=F(u,v)$

  • 对称性:$\pmb{f}(u_1,\dots,u_n;v_1,\dots,v_m)=\pmb{f}(u_{\pi(1)},\dots,u_{\pi(n)};v_1,\dots,v_{\pi(m)})$,其中 $\pi$ 和 $\mu$ 为任意置换

  • 多重仿射性
    $$
    \begin{aligned}
    \pmb{f}(u_1,\dots,\sum\alpha_k u_i^{(k)},\dots,u_n;v_1,\dots,v_m)&=\sum \alpha_k\pmb{f}(u_1,\dots,u_i^{(k)},\dots,u_n;v_1,\dots,v_m)\\\\
    \pmb{f}(u_1,\dots,u_n;v_1,\dots,\sum\alpha_k v_i^{(k)},\dots,v_m)&=\sum \alpha_k\pmb{f}(u_1,\dots,u_n;v_1,\dots,v_i^{(k)},\dots,v_m)\
    \end{aligned}
    $$
    其中$\sum \alpha_k=1$

极形式分离$u$和$v$,能用于推导一些性质和算法,类似于曲线情形

Bézier控制点的极形式表示

image-20220103223926601

de Casteljau算法的极形式表示

image-20220103224055746

IlumEngine实现的张量积Bézier曲面

image-20220108110605435

2.3. 张量积B样条曲面

B样条块

  • 比Bézier块更具一般性

  • 给定阶数$k$

  • 给定在$u$、$v$方向上的结序列$(u_0,\dots,u_{n+k})$、$(v_0,\dots,v_{m+k})$

  • 控制点阵:
    $$
    \begin{array} { c c c } { d _ { 0,0 } } & { \dots } & { d _ { n,0 } } \\\\ { \dots } & { } & { \dots } \\\\ { d _ { 0 , m } } & { \dots } & { d _ { n , m } } \end{array}
    $$

B样条块定义为:
$$
\boldsymbol { f } ( u , v ) = \sum _ { i = 0 } ^ { d } \sum _ { j = 0 } ^ { d } N _ { i } ^ { ( d ) } ( u ) N _ { j } ^ { ( d ) } ( v ) \boldsymbol { p } _ { i , j }
$$
使用B样条基函数的张量积作为基函数

可以用 de Boor 算法计算该块(“曲线的曲线”思想),也可用 2D de Boor 算法,类似 2D de Casteljau 算法但权重不同(通过极形式计算)

IlumEngine实现:

image-20220108114145448

2.4. 张量积有理样条曲面

有理块

使用有理Bézier/B样条创建块

基本思想:

  • 在4D齐次空间中创建参数曲面
  • 投影到$\omega=1$的3D欧式空间

欧式空间中3D曲面不是一个张量积曲面,齐次空间中4D曲面是张量积曲面

有理Bézier块
$$
\begin{aligned} \boldsymbol { f } ^ { ( h o m ) } ( u , v ) = & \sum _ { i = 0 } ^ { d } \sum _ { j = 0 } ^ { d } B _ { i } ^ { ( d ) } ( u ) B _ { j } ^ { ( d ) } ( v ) \left( \begin{array} { c } { \omega _ { i , j } \boldsymbol { p } _ { i , j } } \\ { \omega _ { i , j } } \end{array} \right) \\\\ \boldsymbol { f } ^ { ( \text {Eucl} ) } ( u , v ) =& \frac { \sum _ { i = 0 } ^ { d } \sum _ { j = 0 } ^ { d } B _ { i } ^ { ( d ) } ( u ) B _ { j } ^ { ( d ) } ( v ) \omega _ { i , j } \boldsymbol { p } _ { i , j } } { \sum _ { i = 0 } ^ { d } \sum _ { j = 0 } ^ { d } B _ { i } ^ { ( d ) } ( u ) B _ { j } ^ { ( d ) } ( v ) \omega _ { i , j } } \end{aligned}
$$
有理B样条块
$$
\begin{aligned}
\boldsymbol { f } ^ { ( \text {hom} ) } ( u , v ) = & \sum _ { i = 0 } ^ { d } \sum _ { j = 0 } ^ { d } N _ { i } ^ { ( d ) } ( u ) N _ { j } ^ { ( d ) } ( v ) \left( \begin{array} { c } { \omega _ { i , j } \boldsymbol { p } _ { i , j } } \\ { \omega _ { i , j } } \end{array} \right) \\\\
\boldsymbol { f } ^ { ( \text {eucl} ) } ( u , v ) = & \frac { \sum _ { i = 0 } ^ { d } \sum _ { j = 0 } ^ { d } N _ { i } ^ { ( d ) } ( u ) N _ { j } ^ { ( d ) } ( v ) \omega _ { i , j } \boldsymbol { p } _ { i , j } } { \sum _ { i = 0 } ^ { d } \sum _ { j = 0 } ^ { d } N _ { i } ^ { ( d ) } ( u ) N _ { j } ^ { ( d ) } ( v ) \omega _ { i , j } }
\end{aligned}
$$
旋转曲面

image-20220104112502425

有理块的优势:

  • 能够精确表示旋转曲面
  • 例子:圆柱、圆锥、球体、椭球等

给定:曲线控制点$\pmb{p}_ 1,\dots,\pmb{p}_ n$,欲计算有理曲面$\pmb p_{i,j}$,描述了母线在 $y$ 轴上的旋转曲面

image-20220104112531875

考虑简单情形,只看一个有理Bézier曲线,在 $u$ 方向给定控制顶点 $\pmb{p}_ 1,\dots,\pmb{p}_ {d+1}$,然后引入新参数 $v$,在 $v$ 方向使用二次Bézier曲线

image-20220104112816501

使一个点按 $y$ 轴旋转,这样得到四段:

image-20220104113004614

举例:

双三次有理Bézier曲面表示椭球面:
$$
\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1
$$
参数方程表示:
$$
\begin{cases}
x=a\cos\varphi\cos\theta\\\\
y=b\cos\varphi\sin\theta\\\\
z=c\sin\varphi
\end{cases}
$$
令$u=\tan\frac{\varphi}{2}$,$v=\tan\frac{\theta}{2}$,有:
$$
\begin{cases}
x=\dfrac{a(1-u^2)(1-v^2)}{(1+u^2)(1+v^2)}\\\\
y=\dfrac{2b(1-u^2)v}{(1+u^2)(1+v^2)}\\\\
z=\dfrac{2cu}{1+u^2}
\end{cases}
$$
齐次坐标表示:
$$
\begin{cases}
x=a(1-u^2)(1-v^2)\\\\
y=2b(1-u^2)v\\\\
z=2c(1+v^2)u\\\\
w=(1+u^2)(1+v^2)
\end{cases}
$$
极形式表示为:
$$
\begin{cases}
X=a\left(1-\dfrac{u_1u_2+u_2u_3+u_1u_3}{3}\right)\left(1-\dfrac{v_1v_2+v_2v_3+v_1v_3}{3}\right)\\\\
Y=2b\left(1-\dfrac{u_1u_2+u_2u_3+u_1u_3}{3}\right)\dfrac{v_1+v_2+v_3}{3}\\\\
Z=2c\left(1+\dfrac{v_1v_2+v_2v_3+v_1v_3}{3}\right)\dfrac{u_1+u_2+u_3}{3}\\\\
W=\left(1+\dfrac{u_1u_2+u_2u_3+u_1u_3}{3}\right)\left(1+\dfrac{v_1v_2+v_2v_3+v_1v_3}{3}\right)
\end{cases}
$$
通过2D de Casteljau算法,即设置$f(0,\cdots,1;0,\cdots,1)$可得控制点:
$$
\begin{aligned}
\begin{pmatrix}
p_{00}&p_{01}&p_{02}&p_{03}\\
w_{00}&w_{01}&w_{02}&w_{03}
\end{pmatrix}
&=
\begin{pmatrix}
a&a&\frac{2a}{3}&0\\
0&0&0&0\\
0&\frac{2c}{3}&\frac{4c}{3}&2c\\
1&1&\frac{4}{3}&2
\end{pmatrix}\\\\
\begin{pmatrix}
p_{10}&p_{11}&p_{12}&p_{13}\\
w_{10}&w_{11}&w_{12}&w_{13}
\end{pmatrix}
&=
\begin{pmatrix}
a&a&\frac{2a}{3}&0\\
\frac{2b}{3}&\frac{2b}{3}&\frac{4b}{9}&0\\
0&\frac{2c}{3}&\frac{4c}{3}&2c\\
1&1&\frac{4}{3}&2
\end{pmatrix}\\\\
\begin{pmatrix}
p_{20}&p_{21}&p_{22}&p_{23}\\
w_{20}&w_{21}&w_{22}&w_{23}
\end{pmatrix}
&=
\begin{pmatrix}
\frac{2a}{3}&\frac{2a}{3}&\frac{4a}{9}&0\\
\frac{4b}{3}&\frac{4b}{3}&\frac{8b}{9}&0\\
0&\frac{8c}{9}&\frac{16c}{9}&\frac{8c}{3}\\
\frac{4}{3}&\frac{4}{3}&\frac{16}{9}&\frac{8}{3}
\end{pmatrix}\\\\
\begin{pmatrix}
p_{30}&p_{31}&p_{32}&p_{33}\\
w_{30}&w_{31}&w_{32}&w_{33}
\end{pmatrix}
&=
\begin{pmatrix}
0&0&0&0\\
2b&2b&\frac{4b}{3}&0\\
0&\frac{4c}{3}&\frac{8c}{3}&4c\\
2&2&\frac{8}{3}&4
\end{pmatrix}
\end{aligned}
$$
代入双三次有理Bézier曲面方程:
$$
\pmb f^{(Eucl)}(u,v)=
\frac{\sum_{i=0}^3\sum_{j=0}^3B_i^{(3)}(u)B_j^{(3)}(v)\omega_{i,j}\pmb p_{ij}}
{\sum_{i=0}^3\sum_{j=0}^3B_i^{(3)}(u)B_j^{(3)}(v)\omega_{i,j}}
$$
通过采样$(u,v)$可以画出最终的曲面

3. 全度曲面 Total Degree Surface

3.1. Bézier三角形

image-20220104115439811

能用三角形 de Casteljau 算法

  • 极形式能很好地定义 Bezier 三角形
  • 对开花值进行重心插值

极形式

使用点做参数的原函数 $F$ 与极形式 $\pmb{f}$ 分别为
$$
\begin{aligned}
F:\mathbb{R}^n \to \mathbb{R}^m\\\\
\pmb{f}:\mathbb{R}^{d\times n} \to \mathbb{R}^m
\end{aligned}
$$
性质

  • 对角性:$\pmb{f}(\pmb{t},\dots,\pmb{t})=\pmb{F}(\pmb{t})$

  • 对称性:$\pmb{f}(\pmb{t}_ 1,\dots,\pmb{t}_ d)=\pmb{f}(\pmb{t}_ {\pi(1)},\dots,\pmb{p}_ {\pi(d)})$

  • 多重仿射:
    $$
    \pmb{f}(\pmb{t}_ 1,\dots,\sum\alpha_k\pmb{t}_ i^{(k)},\dots,\pmb{t}_ d)=\sum \alpha_k \pmb{f}(\pmb{t}_ {\pi(1)},\dots,\pmb{t}_ i^{(k)},\dots,\pmb{p}_ {\pi(d)})
    $$

示例:

双变量单项式基函数:
$$
\begin{aligned}
B=\{ &\\
& 1,\\
& u,v,\\
& u^2,uv,v^2\}
\end{aligned}
$$
对应的极形式为:
$$
\begin{aligned}
B=\{&\\
&1,\\
&\frac{1}{2}(u_1+u_2),\frac{1}{2}(v_1+v_2)\\
&u_1u_2,\frac{1}{4}(u_1v_1+u_1v_2+u_2v_1+u_2v_2),v_1v_2\
\}
\end{aligned}
$$

重心坐标

image-20220104120007821

其中 $\alpha + \beta + \gamma = 1$
$$
\alpha = \frac { \operatorname { area } \left( \Delta \left( \boldsymbol { p } _ { 2 } , \boldsymbol { p } _ { 3 } , \boldsymbol { p } \right) \right) } { \operatorname { area } \left( \Delta \left( \boldsymbol { p } _ { 1 } , \boldsymbol { p } _ { 2 } , \boldsymbol { p } _ { 3 } \right) \right) } , \beta = \frac { \operatorname { area } \left( \Delta \left( \boldsymbol { p } _ { 1 } , \boldsymbol { p } _ { 3 } , \boldsymbol { p } \right) \right) } { \operatorname { area } \left( \Delta \left( \boldsymbol { p } _ { 1 } , \boldsymbol { p } _ { 2 } , \boldsymbol { p } _ { 3 } \right) \right) } , \gamma = \frac { \operatorname { area } \left( \Delta \left( \boldsymbol { p } _ { 1 } , \boldsymbol { p } _ { 2 } , \boldsymbol { p } \right) \right) } { \operatorname { area } \left( \Delta \left( \boldsymbol { p } _ { 1 } , \boldsymbol { p } _ { 2 } , \boldsymbol { p } _ { 3 } \right) \right) }
$$
可以化为:
$$
\begin{aligned}
\pmb{p} &= \alpha \boldsymbol { p } _ { 1 } + \beta \boldsymbol { p } _ { 2 } + \gamma \boldsymbol { p } _ { 3 }\\\\
&= \alpha \boldsymbol { p } _ { 1 } + \beta \boldsymbol { p } _ { 2 } + ( 1 - \alpha - \beta ) \boldsymbol { p } _ { 3 }\\\\
&= \alpha \boldsymbol { p } _ { 1 } + \beta \boldsymbol { p } _ { 2 } + \boldsymbol { p } _ { 3 } - \alpha \boldsymbol { p } _ { 3 } - \beta \boldsymbol { p } _ { 3 }\\\\
&= \boldsymbol { p } _ { 3 } + \alpha \left( \boldsymbol { p } _ { 1 } - \boldsymbol { p } _ { 3 } \right) + \beta \left( \boldsymbol { p } _ { 2 } - \boldsymbol { p } _ { 3 } \right)
\end{aligned}
$$
image-20220104120147309

Bézier三角形

基本思想:

  • 使用三角形上3D坐标作为极形式输入,对应一个重心坐标 $(\alpha,\beta,\gamma)$,其中 $\alpha + \beta + \gamma=1$
  • 输出是3D点
  • 控制点为$\pmb{p}(\underbrace{a,\dots,a}_i,\underbrace{b,\dots,b}_j,\underbrace{c,\dots,c}_k)$,其中$i+j+k=d$
  • De Casteljau算法:通过重心坐标插值计算多项式值$\pmb p(x,\cdots,x)$

Bézier三角形:

  • 标准形式:
    $$
    \pmb F(t)=\sum_{i=0}^d\begin{pmatrix}d\\i\end{pmatrix}t^i(1-t)^{d-i}\pmb f(\underbrace{\pmb a,\cdots,\pmb a}_i,\underbrace{\pmb b,\cdots,\pmb b}_{d-i})
    $$
    重心插值点$\pmb p=(1-t)\pmb a+t\pmb b$

  • 重心形式:
    $$
    \pmb F(\pmb p)=\sum_{\begin{matrix}i+j=d\\i\geq0,j\geq 0\end{matrix}}\frac{d!}{i!j!}\alpha^i\beta^j\pmb f(\underbrace{\pmb a,\cdots,\pmb a}_i,\underbrace{\pmb b,\cdots,\pmb b}_j)
    $$
    其中,$\alpha+\beta=1$,重心插值点$\pmb p=\alpha\pmb a+\beta\pmb b$

  • Bernstein形式:
    $$
    \pmb F(\pmb x)=\sum_{\begin{matrix}i+j+k=d\\i,j,k\geq 0\end{matrix}}\frac{d!}{i!j!k!}\alpha^i\beta^j\gamma^k\pmb f(\underbrace{\pmb a,\cdots,\pmb a}_i,\underbrace{\pmb b,\cdots,\pmb b}_j,\underbrace{\pmb c,\cdots,\pmb c}_k)
    $$
    其中,$\alpha+\beta+\gamma=1$,重心插值点$\pmb x=\alpha\pmb a+\beta\pmb b+\gamma\pmb c$

示例:

三次Bézier三角形

image-20220104121513307

De Casteljau算法:

image-20220104121551541

3.2. 连续性

为了简单起见,仅考虑二次Bézier三角形(即二维情形)

image-20220104140956688

两个二次Bézier三角形具有公共边:

  • 参数化:$T_1=\{\pmb a,\pmb b,\pmb c\}$,$T_2=\{\pmb c,\pmb b,\pmb d\}$
  • 多项式表面:$\pmb F(T_1)$,$\pmb G(T_2)$
  • 控制点:
    • $\pmb F(T_1):\pmb f(\pmb a, \pmb a),\pmb f(\pmb a, \pmb b),\pmb f(\pmb b, \pmb b),\pmb f(\pmb a, \pmb c),\pmb f(\pmb c, \pmb c),\pmb f(\pmb b, \pmb c)$
    • $\pmb G(T_2):\pmb g(\pmb d, \pmb d),\pmb g(\pmb d, \pmb b),\pmb g(\pmb b, \pmb b),\pmb g(\pmb d, \pmb c),\pmb g(\pmb c, \pmb c),\pmb g(\pmb b, \pmb c)$

$C^0$连续性

边界点应满足:
$$
\begin{aligned}
\pmb f(\pmb b,\pmb b)&=\pmb g(\pmb b,\pmb b)\\\\
\pmb f(\pmb b,\pmb c)&=\pmb g(\pmb b,\pmb c)\\\\
\pmb f(\pmb c,\pmb c)&=\pmb g(\pmb c,\pmb c)
\end{aligned}
$$

证明:

定义$\pmb x:=\beta\pmb b+\gamma\pmb c$,$\beta+\gamma=1$
$$
\begin{aligned}
\pmb f(\pmb x,\pmb x)
&=\beta\pmb f(\pmb b,\pmb x)+\gamma\pmb f(\pmb c,\pmb x)\\\\
&=\beta\pmb f(\pmb b,\beta\pmb b+\gamma\pmb c)+\gamma\pmb f(\pmb c,\beta\pmb b+\gamma\pmb c)\\\\
&=\beta^2\pmb f(\pmb b,\pmb b)+2\beta\gamma\pmb f(\pmb b,\pmb c)+\gamma^2\pmb f(\pmb c,\pmb c)\\\\
&=\beta^2\pmb g(\pmb b,\pmb b)+2\beta\gamma\pmb g(\pmb b,\pmb c)+\gamma^2\pmb g(\pmb c,\pmb c)\\\\
&=\beta\pmb g(\pmb b,\beta\pmb b+\gamma\pmb c)+\gamma\pmb g(\pmb c,\beta\pmb b+\gamma\pmb c)\\\\
&=\beta\pmb g(\pmb b,\pmb x)+\gamma\pmb g(\pmb c,\pmb x)\\\\
&=\pmb g(\pmb x,\pmb x)
\end{aligned}
$$

$C^1$连续性

满足$C^1$连续性的前提是满足$C^0$连续性

并且极形式满足:
$$
\begin{aligned}
\pmb f(\pmb a,\pmb b)&=\pmb g(\pmb a,\pmb b)\\\\
\pmb f(\pmb b,\pmb d)&=\pmb g(\pmb b,\pmb d)\\\\
\pmb f(\pmb a,\pmb c)&=\pmb g(\pmb a,\pmb c)\\\\
\pmb f(\pmb c,\pmb d)&=\pmb g(\pmb c,\pmb d)
\end{aligned}
$$

证明:

导数:
$$
\frac{\partial}{\partial \hat {\pmb d}}\pmb F(\pmb x)\Bigg|_{\pmb x=\pmb p}=\pmb f(\pmb p,\hat{\pmb d})
$$
$C^1$连续,则有:
$$
\forall \pmb x\in\mathbb R^3:\pmb f(\pmb p,\pmb x)=\pmb g(\pmb p,\pmb x)
$$
因此,
$$
\forall \pmb x\in\mathbb R^3:
\begin{cases}
\pmb f(\pmb b,\pmb x)=\pmb g(\pmb b,\pmb x)\\\\
\pmb f(\pmb c,\pmb x)=\pmb g(\pmb c,\pmb x)
\end{cases}
$$
对重心坐标:$\pmb x=\alpha\pmb a+\beta\pmb b+\gamma\pmb c$
$$
\begin{aligned}
\pmb f(\pmb b,\pmb x)&=\alpha\pmb f(\pmb a,\pmb b)+\beta\pmb f(\pmb b,\pmb b)+\gamma\pmb f(\pmb b,\pmb c)\\\\
\pmb g(\pmb b,\pmb x)&=\alpha\pmb g(\pmb a,\pmb b)+\beta\pmb g(\pmb b,\pmb b)+\gamma\pmb g(\pmb b,\pmb c)\\\\
\pmb f(\pmb b,\pmb x)=\pmb g(\pmb b,\pmb x)&\Leftrightarrow
\alpha\pmb f(\pmb a,\pmb b)+\beta\pmb f(\pmb b,\pmb b)+\gamma\pmb f(\pmb b,\pmb c)\\\\
&=\alpha\pmb g(\pmb a,\pmb b)+\beta\pmb g(\pmb b,\pmb b)+\gamma\pmb g(\pmb b,\pmb c)\\\\
&\Leftrightarrow \pmb f(\pmb a,\pmb b)=\pmb g(\pmb a,\pmb b)
\end{aligned}
$$
同理可得其他条件

分享

Wenbo Chen
作者
Wenbo Chen
CG Student

目录