Part 5 贝塞尔曲线和贝塞尔曲面
约 1320 字大约 4 分钟
2025-03-21
1 贝塞尔曲线
贝塞尔曲线通常用来定义可被无限放大的光滑曲线,在计算机图形学中常被用来描述各种物体的运动路径。
下图是一条由四个控制点定义的三阶贝塞尔曲线。p0和p3决定了曲线的起终点,而曲线并不直接通过p1和p2,这两个点只是提供了曲线的走向信息。曲线在起终点的斜率与直线p0p1和p2p3的斜率相同。
1.1 确定贝塞尔曲线
最简单的贝塞尔曲线是由两个控制点确定的,在这种情况下,贝塞尔曲线就是连接两个控制点的直线。
三个控制点可以确定一条二阶贝塞尔曲线,我们以其为例说明贝塞尔曲线的确定过程。
三个控制点连接成两条线段,并规定一个比例系数t,其中0≤t≤1。在线段b0b1上,依据比例系数t可以得到一个点b01。同理在线段b1b2上有点b11。
连接b01b11,按照同样的比例系数t得到b02。
此时我们发现只有一条直线和一个点了,因此停止操作,得到由这个三个控制点确定的、一条二阶贝塞尔曲线的、在比例系数t下的一个点。
计算t从 0 到 1 的所有值,就可以得到一条二阶贝塞尔曲线。
相关信息
n个控制点最多可确定n−1阶的贝塞尔曲线。
由四个控制点确定的三阶贝塞尔曲线也是一样的。
以下是几个动画帮助理解。
二阶贝塞尔曲线:
三阶贝塞尔曲线:
四阶贝塞尔曲线:
五阶贝塞尔曲线:
1.2 贝塞尔曲线的数学表达式
还是回到最简单的二阶贝塞尔曲线。
容易得到,第一次取点:
b01b11=(1−t)b0+tb1=(1−t)b1+tb2
第二次取点:
b02=(1−t)b01+tb11=(1−t)2b0+2t(1−t)b1+t2b2
一般地,对于n阶贝塞尔曲线b(t),0≤t≤1,其一般形式为:
bn(t)=b0n(t)=j=0∑nbjBjn(t)
其中Bjn(t)为贝塞尔多项式:
Bjn(t)=(ni)ti(1−t)n−i=i!(n−i)!n!ti(1−t)n−i
当n=3时,为四个控制点确定的三阶贝塞尔曲线:
b3(t)=b0⋅(1−t)3+b1⋅3t(1−t)2+b2⋅3t2(1−t)+b3⋅t3
由此,可以得出三阶贝塞尔曲线的两条重要性质:
b(0)b(1)=b0=b3
b′(0)b′(1)=3(b1−b0)=3(b3−b2)
1.3 分段贝塞尔曲线
我们知道,贝塞尔曲线的控制点只提供位置信息,而不精确控制其走向。因此面对高阶贝塞尔曲线,想调整其形状是非常困难的。各个控制点之间相互联系,容易“牵一发而动全身”。
所以我们对贝塞尔曲线进行分段处理。
行业中通常使用多段三阶贝塞尔曲线,因为可以使用前两个点控制其起点走向,后两个点控制其终点走向。
将三阶贝塞尔曲线首尾相连,就可达到高阶贝塞尔曲线的效果。
这种仅满足an=b0的连续,称其为C0连续。
而像这样满足an=b0=21an−1+b1的连续,称为C1连续。
2 贝塞尔曲面
贝塞尔曲面是贝塞尔曲线在三维空间中的推广。业界中通常使用4×4个控制点去确定一个贝塞尔曲面。
要确定一个贝塞尔曲面,首先需要确定贝塞尔曲线。我们将4×4个控制点按行横向分为四组,每组4个控制点,分别确定四条三阶贝塞尔曲线。
然后在列方向上纵向切片,四条贝塞尔曲线共得到四个点,然后用这四个点得到一条纵向的三阶贝塞尔曲线。
按照这种方式对所有切片求其纵向贝塞尔曲线,即可得到一个贝塞尔曲面。