Please enable Javascript to view the contents

计算机辅助几何设计(5):有理样条曲线

 ·  ☕ 8 分钟

image-20220105110839764

Bézier曲线和B样条曲线均不能用于表示圆锥曲线(如圆、椭圆、双曲线),我们需要一种更强大的样条曲线表示方法。

1. 二次曲面与圆锥曲线

1.1. 定义

圆锥曲线可以表示为二次函数的零集:
$$
\begin{aligned}
ax^2+bxy+cy^2+dx+ey+f&=0\\\\
\pmb{x}^\top\left[\begin{matrix}
a & \frac{b}{2}\\\\
\frac{b}{2} & c
\end{matrix}\right]
\pmb{x}
+
\left[\begin{matrix}
d & e
\end{matrix}\right]
\pmb{x}
+f=0
\end{aligned}
$$

示例:

圆锥的隐式表示 $Ax^2+By^2=z^2$

平面的隐式表示 $z=Dx+Ey+F$

圆锥曲线 $Ax^2+By^2=(Dx+Ey+F)^2$

image-20220103165719618

二次曲线是二次方程(任意维数)的零集:
$$
\{\pmb{x}\in \mathbb{R}^d|\pmb{x}^\top M \pmb{x}+\pmb{b}^\top \pmb{x}+\pmb{c}=0\}
$$

  • 圆锥曲线是$d=2$时的二次曲线

1.2. 圆锥曲线的类型


$$
M:= \left[\begin{matrix}
a & \frac{b}{2} \\\\
\frac{b}{2} & c
\end{matrix}\right]
$$
$M$的特征值为:
$$
\lambda_{1,2}=\frac{a+c \pm \sqrt{(a-c)^2+b^2}}{2}
$$
则:

  • 椭圆:$b^2<4ac$,$\lambda_2>0$
    • 圆:$b=0$,$a=c$
  • 抛物线:$b^2=4ac$,$\lambda_2=0$
  • 双曲线:$b^2>4ac$,$\lambda<0$

1.3. 二次曲线投影

image-20220103170430946

定义:

  • 给定一条三维空间中的二次曲线
  • 将$z$坐标设为齐次项$\omega$,将曲线投影到平面$\omega=1$说

齐次空间(Homogeneous)二次曲线为:
$$
\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)
$$
欧氏空间(Euclidean)投影曲线:
$$
\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 }
$$

1.3.1. 抛物线

对于抛物线方程
$$
y=ax^2
$$
参数化为
$$
\begin{cases}
x=t\\\\
y=at^2
\end{cases}
$$
则齐次空间方程:
$$
\pmb f^{(hom)}(t)=
\begin{pmatrix}0\\0\\1\end{pmatrix}+
\begin{pmatrix}1\\0\\0\end{pmatrix}t+
\begin{pmatrix}0\\a\\0\end{pmatrix}t^2
$$
因此投影曲线为:
$$
\pmb f^{(eucl)}=\frac{
\begin{pmatrix}0\\0\end{pmatrix}+
\begin{pmatrix}1\\0\end{pmatrix}t+
\begin{pmatrix}0\\a\end{pmatrix}t^2
}{1+0t+0t^2}
$$

1.3.2. 椭圆

对椭圆方程:
$$
\frac{x^2}{a^2}+\frac{y^2}{b^2}=1
$$
参数化为:
$$
\begin{cases}
x=a\cos\theta\\\\
y=b\cos\theta
\end{cases}
$$
令$t=\tan\frac{\theta}{2}$,当$t\in[0,1]$时,$\theta\in[0,\frac{\pi}{4}]$,为四分之一圆,先考虑这四分之一的部分

则参数方程可化为:
$$
\begin{cases}
x=\dfrac{a(1-t^2)}{1+t^2}\\\\
y=\dfrac{2bt}{1+t^2}
\end{cases}
$$
则齐次空间方程:
$$
\pmb f^{(hom)}(t)=
\begin{pmatrix}a\\0\\1\end{pmatrix}+
\begin{pmatrix}0\\2b\\0\end{pmatrix}t+
\begin{pmatrix}-a\\0\\1\end{pmatrix}t^2
$$
因此投影曲线为:
$$
\pmb f^{(eucl)}=\frac{
\begin{pmatrix}a\\0\end{pmatrix}+
\begin{pmatrix}0\\2b\end{pmatrix}t+
\begin{pmatrix}-a\\0\end{pmatrix}t^2
}{1+0t+1t^2}
$$

1.3.3. 双曲线

对双曲线方程:
$$
\frac{x^2}{a^2}-\frac{y^2}{b^2}=1
$$
参数化为:
$$
\begin{cases}
x=\dfrac{a}{\cos\theta}\\\\
y=b\tan\theta
\end{cases}
$$
令$t=\tan\frac{\theta}{2}$,当$t\in[0,1]$时,$\theta\in[0,\frac{\pi}{4}]$,为四分之一圆,先考虑这四分之一的部分

则参数方程可化为:
$$
\begin{cases}
x=\dfrac{a(1+t^2)}{1-t^2}\\\\
y=\dfrac{2bt}{1-t^2}
\end{cases}
$$
则齐次空间方程:
$$
\pmb f^{(hom)}(t)=
\begin{pmatrix}a\\0\\1\end{pmatrix}+
\begin{pmatrix}0\\2b\\0\end{pmatrix}t+
\begin{pmatrix}a\\0\\-1\end{pmatrix}t^2
$$
因此投影曲线为:
$$
\pmb f^{(eucl)}=\frac{
\begin{pmatrix}a\\0\end{pmatrix}+
\begin{pmatrix}0\\2b\end{pmatrix}t+
\begin{pmatrix}a\\0\end{pmatrix}t^2
}{1+0t-1t^2}
$$

2. 有理Bézier曲线

2.1. 定义

$\mathbb R^n$上定义的$d$阶有理Bézier曲线:

  • 构成$n+1$维上的$d$阶Bézier曲线
  • 最后一维视为齐次项
  • 欧式坐标由投影变换得到

$$
\begin{aligned}
\pmb f^{(hom)}(t)&=\sum_{i=0}^nB_i^{(d)}(t)\pmb p_i,\quad \pmb p_i\in\mathbb{R}^{n+1}\\\\
\pmb f^{(eucl)}(t)&=\dfrac{\sum_{i=0}^nB_i^{(d)}(t)\begin{pmatrix}p_i^{(1)}\\\vdots\\p_i^{(n)}\end{pmatrix}}{\sum_{i=0}^nB_i^{(d)}(t)p_i^{(n+1)}}
\end{aligned}
$$

等价地可写为权重形式:
$$
\begin{aligned}
\pmb f^{(eucl)}(t)&=\dfrac{\sum_{i=0}^nB_i^{(d)}(t)\omega_i\begin{pmatrix}p_i^{(1)}\\\vdots\\p_i^{(n)}\end{pmatrix}}{\sum_{i=0}^nB_i^{(d)}(t)\omega_i}\\\\
&=\sum_{i=0}^nq_i(t)\pmb p_i
\end{aligned}
$$
其中,
$$
q_i(t)=\dfrac{B_i^{(d)}(t)\omega_i}{\sum_{i=0}^nB_i^{(d)}(t)\omega_i}
$$
满足:$\sum_{i=0}^nq_i(t)=1$

几何解释:

普通的Bézier曲线通过中心投影变换得到有理Bézier曲线

image-20220103193652837

2.2. 有理de Casteljau算法

三种计算方法:

  1. 在$n+1$维上进行计算,最后再投影:$\boldsymbol { b } _ { i } ^ { ( r ) } ( t ) = ( 1 - t ) \boldsymbol { b } _ { i } ^ { ( r - 1 ) } ( t ) + t \boldsymbol { b } _ { i + 1 } ^ { ( r - 1 ) } ( t )$

  2. 分别计算分子和分母,最后进行除法,类似于第一种

  3. 每一步都作投影除法:
    $$
    \begin{aligned}
    \pmb b_i^{(r)}(t)=(1-t)\frac{\omega_i^{(r-1)}(t)}{\omega_i^{(r)}(t)}\pmb b_i^{(r-1)}(t)+t\frac{\omega_{i+1}^{(r-1)}(t)}{\omega_i^{(r)}(t)}\pmb b_{i+1}^{(r-1)}(t)
    \end{aligned}
    $$
    其中,
    $$
    \omega_i^{(r)}(t)=(1-t)\omega_i^{(r-1)}(t)+t\omega_{i+1}^{(r-1)}(t)
    $$

3. 二次有理Bézier曲线

3.1. 二次有理Bézier曲线的标准型

二次有理曲线能够充要地表达圆锥曲线,二次有理Bézier曲线形式如下:
$$
\begin{aligned}
\pmb{f} ^ { ( e u c l ) } ( t )
&= \frac { B _ { 0 } ^ { ( 2 ) } ( t ) \omega _ { 0 } \boldsymbol { p } _ { 0 } + B _ { 1 } ^ { ( 2 ) } ( t ) \omega _ { 1 } \boldsymbol { p } _ { 1 } + B _ { 2 } ^ { ( 2 ) } ( t ) \omega _ { 2 } \boldsymbol { p } _ { 2 } } { B _ { 0 } ^ { ( 2 ) } ( t ) \omega _ { 0 } + B _ { 1 } ^ { ( 2 ) } ( t ) \omega _ { 1 } + B _ { 2 } ^ { ( 2 ) } ( t ) \omega _ { 2 } }\\\\
&=\frac { (1-t)^2 \omega _ { 0 } \boldsymbol { p } _ { 0 } + 2t(1-t) \omega _ { 1 } \boldsymbol { p } _ { 1 } + t^2 \omega _ { 2 } \boldsymbol { p } _ { 2 } } { (1-t)^2 \omega _ { 0 } + 2t(1-t) \omega _ { 1 } + t^2 \omega _ { 2 } }
\end{aligned}
$$
只考虑曲线的形状,进行重参数化:
$$
t=\frac{\tilde{t}}{\alpha(1-\tilde{t})+\tilde{t}}
$$
这样一来形状仅与参数$\alpha$有关

image-20220103195745092

代入二次有理Bézier曲线形式:
$$
\begin{aligned} f ^ { ( e u c l ) } ( t )
=& \frac {
\left( \frac { \alpha ( 1 - \tilde { t } ) } { \alpha ( 1 - \tilde { t } ) + \tilde { t } } \right) ^ { 2 } \omega _ { 0 } \boldsymbol { p } _ { 0 }
+ 2 \left( \frac { \alpha ( 1 - \tilde { t } ) } { \alpha ( 1 - \tilde { t } ) + \tilde { t } } \right) \left( \frac { \tilde { t } } { \alpha ( 1 - \tilde { t } ) + \tilde { t } } \right) \omega _ { 1 } \boldsymbol { p } _ { 1 }
+ \left( \frac { \tilde { t } } { \alpha ( 1 - \tilde { t } ) + \tilde { t } } \right) ^ { 2 } \omega _ { 2 } \boldsymbol { p } _ { 2 }
}{
\left( \frac { \alpha ( 1 - \tilde { t } )} { \alpha ( 1 - \tilde { t } ) + \tilde { t } } \right) ^ { 2 } \omega _ { 0 }
+ 2 \left( \frac { \alpha ( 1 - \tilde { t } ) } { \alpha ( 1 - \tilde { t } ) + \tilde { t } } \right) \left( \frac { \tilde { t } } { \alpha ( 1 - \tilde { t } ) + \tilde { t } } \right) \omega _ { 1 }
+ \left( \frac { \tilde { t } } { \alpha ( 1 - \tilde { t } ) + \tilde { t } } \right) ^ { 2 } \omega _ { 2 }
}\\\\
= &\frac { \alpha ^ { 2 } ( 1 - \tilde { t } ) ^ { 2 } \omega _ { 0 } \boldsymbol { p } _ { 0 } + 2 \alpha ( 1 - \tilde { t } ) \tilde { t } \omega _ { 1 } \boldsymbol { p } _ { 1 } + \tilde { t } ^ { 2 } \omega _ { 2 } \boldsymbol { p } _ { 2 } } { \alpha ^ { 2 } ( 1 - \tilde { t } ) ^ { 2 } \omega _ { 0 } + 2 \alpha ( 1 - \tilde { t } ) \tilde { t } \omega _ { 1 } + \tilde { t } ^ { 2 } \omega _ { 2 } }\\\\
= &\frac { \alpha ^ { 2 } B_0^{(2)}(\tilde{t}) \omega _ { 0 } \boldsymbol { p } _ { 0 } + \alpha B_1^{(2)}(\tilde{t}) \omega _ { 1 } \boldsymbol { p } _ { 1 } + B_2^{(2)}(\tilde{t}) \omega _ { 2 } \boldsymbol { p } _ { 2 } } { \alpha ^ { 2 } B_0^{(2)}(\tilde{t}) \omega _ { 0 } + \alpha B_1^{(2)}(\tilde{t}) \omega _ { 1 } + B_2^{(2)}(\tilde{t}) \omega _ { 2 } }\\\\
\xlongequal{\alpha=\sqrt{\frac{\omega_2}{\omega_0}}}&\frac { B_0^{(2)}(\tilde{t}) \omega _ { 2 } \boldsymbol { p } _ { 0 } + B_1^{(2)}(\tilde{t}) \sqrt{\frac{\omega_2}{\omega_0}} \omega _ { 1 } \boldsymbol { p } _ { 1 } + B_2^{(2)}(\tilde{t}) \omega _ { 2 } \boldsymbol { p } _ { 2 } } { B_0^{(2)}(\tilde{t}) \omega _ { 2 } + B_1^{(2)}(\tilde{t}) \sqrt{\frac{\omega_2}{\omega_0}} \omega _ { 1 } + B_2^{(2)}(\tilde{t}) \omega _ { 2 } }\\\\
=&\frac { B_0^{(2)}(\tilde{t})\boldsymbol { p } _ { 0 } + B_1^{(2)}(\tilde{t}) \sqrt{\frac{1}{\omega_0\omega_2}} \omega _ { 1 } \boldsymbol { p } _ { 1 } + B_2^{(2)}(\tilde{t}) \boldsymbol { p } _ { 2 } } { B_0^{(2)}(\tilde{t}) + B_1^{(2)}(\tilde{t}) \sqrt{\frac{1}{\omega_0\omega_2}} \omega _ { 1 } + B_2^{(2)}(\tilde{t}) }\\\\
\xlongequal{\omega=\sqrt{\frac{1}{\omega_0\omega_2}}\omega_1}&\frac { B_0^{(2)}(\tilde{t})\boldsymbol { p } _ { 0 } + B_1^{(2)}(\tilde{t}) \omega \boldsymbol { p } _ { 1 } + B_2^{(2)}(\tilde{t}) \boldsymbol { p } _ { 2 } } { B_0^{(2)}(\tilde{t}) + B_1^{(2)}(\tilde{t}) \omega + B_2^{(2)}(\tilde{t}) }
\end{aligned}
$$
得到二次有理Bézier曲线的标准形式

3.2. 分类

从标准形式出发,设$\omega_0=\omega_2=1$,$\omega_1=\omega$

则有:

  • $\omega<1$:椭圆曲线段
  • $\omega=1$:抛物线曲线段
  • $\omega>1$:双曲线曲线段

image-20220103200135591

证明:

将参数形式转化为隐式形式,将曲线表示为重心坐标:
$$
\pmb{f}(t)=\tau_0(t)\pmb{p}_0+\tau_1(t)\pmb{p}_1+\tau_2(t)\pmb{p}_2
$$
image-20220103200314395

对比有理二次Bézier曲线的标准形式有:
$$
\begin{array}{lll}
\tau_0(t) &= \frac{(1-t)^2\omega_0}{\omega(t)}
&\Rightarrow 1-t=\sqrt{\frac{\tau_0(t)\omega(t)}{\omega_0}}\\\\
\tau_1(t) &= \frac{2t(1-t)\omega_1}{\omega(t)}\\\\
\tau_2(t) &= \frac{t^2\omega_2}{\omega(t)}
&\Rightarrow t=\sqrt{\frac{\tau_2(t)\omega(t)}{\omega_2}}\
\end{array}
$$
其中,
$$
\omega(t)=(1-t)^2\omega_0+2t(1-t)\omega_1+t^2\omega_2
$$
则有:
$$
\tau_1(t)
=2\frac{\omega_1}{\omega(t)}\sqrt{\frac{\tau_0(t)\omega(t)}{\omega_0}\frac{\tau_2(t)\omega(t)}{\omega_2}}
=2\omega_1\sqrt{\frac{\tau_0(t)\tau_2(t)}{\omega_0\omega_2}}
$$
利用:
$$
\tau_2(t)=1-\tau_0(t)-\tau_1(t)
$$
整理得到:
$$
4\omega_1^2\tau_0^2(t)+4\omega_1^2\tau_0(t)\tau_1(t)+\omega_0\omega_2\tau_1^2(t)-4\omega_1^2\tau_0(t)=0
$$
对于标准形式 $\omega_0=\omega_2=1$,$\omega_1=\omega$,则
$$
4\omega^2\tau_0^2(t)+4\omega^2\tau_0(t)\tau_1(t)+\tau_1^2(t)-4\omega^2\tau_0(t)=0
$$
这里$\tau_0$ 和 $\tau_1$ 就相当于 $x$ 和 $y$,因此,由圆锥曲线的隐式表达可知:
$$
\lambda_{1,2}=\frac{4\omega^2+1\pm\sqrt{(4\omega^2-1)^2+16\omega^4}}{2}
$$
得到:

  • $\omega=1$:抛物线
  • $\omega<1$:椭圆
  • $\omega>1$:双曲线

3.3. 对偶

对于二次有理曲线的一般形式,$t\in[0,1]$:
$$
\pmb x(t)=\frac{(1-t)^2\pmb b_0+2t(1-t)\omega\pmb b_1+t^2\pmb b_2}{(1-t)^2+2t(1-t)\omega+t^2}
$$
对偶段为$t\in\mathbb R\backslash [0,1]$,则可用参数化
$$
\hat t=\frac{t}{2t-1}
$$
当$t\in(0,\frac{1}{2})$时,$\hat t\in(0,-\infty)$;当$t\in(\frac{1}{2},1)$时,$\hat t\in(+\infty,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 } }\end{aligned}
$$
区别在于$\omega$取反

示例:

image-20220103203538006

考虑分母
$$
\omega(t)=(1-t)^2-2t(1-t)\omega+t^2
$$
为一个图像如下的抛物线:

image-20220103203812702

可推得:

  • $\omega<1$:没有奇异点,椭圆
  • $\omega=1$:有一个奇异点,抛物线
  • $\omega>1$:有两个奇异点,双曲线

3.4. 圆锥曲线的绘制

  1. 先将圆锥曲线的隐式表示转为参数表示:
    $$
    \begin{cases}
    x=x(t)\\\\
    y=y(t)
    \end{cases}
    $$

  2. 计算二次有理曲线形式:
    $$
    \pmb f(t)=\frac{(1-t)^2\pmb b_0+2t(1-t)\omega\pmb b_1+t^2\pmb b_2}{(1-t)^2+2t(1-t)\omega+t^2}
    $$

  3. 求得控制点$\pmb b_0$,$\pmb b_1$,$\pmb b_2$,构成矩阵$P$:
    $$
    P=(\pmb b_0,\pmb b_1,\pmb b_2)
    $$

  4. 对于采样点$0=t_0=t_1=\cdots=t_n=1$,构成矩阵:
    $$
    T=\begin{pmatrix}
    (1-t_0)^2&(1-t_1)^2&\cdots&(1-t_n)^2\\
    2t_0(1-t_0)&2t_1(1-t_1)&\cdots&2t_n(1-t_n)\\
    t_0^2&t_1^2&\cdots&t_n^2
    \end{pmatrix}
    $$

  5. 曲线点由$X=PT$进行计算

  6. 对于对偶曲线,控制点矩阵为:
    $$
    \tilde P=(\pmb b_0,-\pmb b_1,\pmb b_2)
    $$

  7. 对偶曲线由$X=\tilde PT$进行计算

3.5. Farin点

image-20220103211628519
$$
\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}
$$
满足关系
$$
\frac { \omega _ { i + 1 } } { \omega _ { i } } = \frac { \left\| \pmb{b} _ { i } - \pmb{f} _ { i } \right\| } { \left\| \pmb{b} _ { i + 1 } - \pmb{f} _ { i } \right\| }
$$
image-20220103212146824

对于标准形式,有
$$
\pmb{q} _ { 0 } = \frac { \pmb{p} _ { 0 } + \omega _ { 1 } \pmb{p} _ { 1 } } { 1 + \omega _ { 1 } } , \pmb{q} _ { 1 } = \frac { \pmb{p} _ { 1 } + \omega _ { 1 } \pmb{p} _ { 2 } } { 1 + \omega _ { 1 } }
$$

3.6. 二次有理Bézier曲线的性质

3.6.1. 端点插值

$$
\begin{align}
\pmb f(0)&=\pmb b_0\\\\
\pmb f(1)&=\pmb b_2
\end{align}
$$

3.6.2. 凸包性质

曲线位于凸包$(\pmb{b}_ 0,\pmb{f}_ 0,\dots,\pmb{f}_ {n-1},\pmb{b}_ n)$内

image-20220103212557669

3.6.3. 导数性质

令:
$$
\pmb f(t)=\frac{\sum_{i=0}^nB_i^{(d)}(t)\omega_i\pmb p_i}{\sum_{i=0}^nB_i^{(d)}(t)\omega_i}=:\frac{\pmb p(t)}{\omega(t)}
$$
因此,有
$$
\begin{aligned}
\pmb f(t)=\frac{\pmb p(t)}{\omega(t)}&\Rightarrow\pmb p(t)=\pmb f(t)\omega(t)\\\\
&\Rightarrow \pmb p'(t)=\pmb f'(t)\omega(t)+\pmb f(t)\omega'(t)\\\\
&\Rightarrow \pmb f'(t)=\frac{\pmb p'(t)-\pmb f(t)\omega'(t)}{\omega(t)}
\end{aligned}
$$
对于边界点,有:
$$
\begin{aligned}
\pmb{f}^\prime(0)&=\frac{d(\omega_1\pmb{p}_1-\omega_0\pmb{p}_0)-d(\omega_1-\omega_0)\pmb{p}_0}{\omega_0}=d\frac{\omega_1}{\omega_0}(\pmb{p}_1-\pmb{p}_0)\\\\
\pmb{f}^\prime(1)&=\frac{d(\omega_{d}\pmb{p}_{d}-\omega_{d-1}\pmb{p}_{d-1})-d(\omega_{d}-\omega_{d-1})\pmb{p}_{d}}{\omega_d}=d\frac{\omega_{d-1}}{\omega_d}(\pmb{p}_d-\pmb{p}_{d-1})
\end{aligned}
$$

4. 非均匀有理B样条NURB

$$
\boldsymbol { f } ( t ) = \frac { \sum _ { i = 1 } ^ { n } N _ { i,k } ( t ) \omega _ { i } \boldsymbol { p } _ { i } } { \sum _ { i = 1 } ^ { n } N _ { i,k } ( t ) \omega _ { i } }
$$

类似于有理Bézier曲线

5. 视频演示

IlumEngine中已实现有理Bézier曲线的绘制,通过调节控制点的权重得到不同的曲线形态。

分享

Wenbo Chen
作者
Wenbo Chen
CG Student

目录