[计算机图形学]几何:曲线和曲面(前瞻预习/复习回顾)

一、曲线

1.Bézier Curves—贝塞尔曲线

贝塞尔曲线也是一种显式的几何表示方法。贝塞尔曲线定义了一系列的控制点,致使确定满足这些控制点关系的唯一一条曲线:如上图定义的贝塞尔曲线满足 起始点为p0,结束点为p3,起始点的切线方向是p0p1方向,结束点切线方向是p2p3方向。

而事实上,我们在实际情况需要计算任意多个控制点的情况,也就是说不只是四个点才能画出一条贝塞尔曲线,一条贝塞尔曲线可以由任意多个控制点决定,那么如何根据这些控制点确定一条贝塞尔曲线呢?接下来我们将介绍几种算法。

(1)de Casteljau 算法

de Casteljau 算法其实是一种递归思想,我们以上图中的三个控制点的贝塞尔曲线也就是二次贝塞尔曲线为例,我们把每两个点b0-b1,b1-b2分别用0-1代替,中间某个时刻设为t,那么加入我们要找贝塞尔曲线上t时刻的点,假如是1/3,那么如上图,我们在b0-b1上找一点1/3,b1-b2上找一点1/3,把它们相连得到一条新的直线,在这条新的直线上再找1/3处一点,就是b1,b2,b3这三个控制点控制下的贝塞尔曲线的1/3处的位置,而遍历0-1间所有的t值,就可以得到这条贝塞尔曲线了。

 四个控制点的贝塞尔曲线同理,只不过多了一步取t位置的操作。

(2)代数公式法

de Casteljau算法可以得到一个系数金字塔,我们从上图可以看出,每一层都相当于在两点之间做了一个插值运算,从而最终形成一个金字塔。我们当然可以用数学形式把它表示出来如下图:

上图展示了三个控制点的贝塞尔曲线的代数表示形式,很好理解,如第一个公式:当t=0时,点的位置就是在最左边的点b0上,下面的公式都同理。最终得到最下面的公式很像1的展开,我们当然也可以通过这个三个控制点的公式推广出n个控制点的贝塞尔曲线的代数公式。

也就说给定n+1控制点,我们就可以得到一个n阶的贝塞尔曲线,这个贝塞尔曲线在任意时间t都是前面给出的n+1个控制点的线性组合,线性组合的系数是一个和时间有关的多项式,这个多项式就是伯恩斯坦多项式(Bernstein),也就是描述二项分布的多项式。简单的说,就是任意一个n阶贝塞尔曲线,它的时间为t的点位置就是由伯恩斯坦多项式为系数对给定的一系列控制点的加权。

同时我们也并没有说,贝塞尔曲线只能在平面上定义,我们可以把控制点设为三维空间中的坐标从而得出三维空间中的贝塞尔曲线代数公式,如上图

 Bernstein多项式

(3)贝塞尔曲线的性质

前两条性质我们前面已经提到过了,直接看第三条,贝塞尔曲线的控制点在仿射变换后,如果把这些控制点再连成新的贝塞尔曲线,那么前后两个贝塞尔曲线是不变的,但也仅仅是在仿射变换下,如投影变换则不满足这种性质。第四条凸包性质:贝塞尔曲线一定在自己所有控制点所连成的凸包多边形的里面。如下图中的蓝色线为控制点连成的凸包,那么这几个控制点所形成的贝塞尔曲线一定在蓝色线框的里面。

2.Piecewise Bézier Curves—逐段贝塞尔曲线

为什么要引进逐段贝塞尔曲线呢?如上图中的一段贝塞尔曲线,对于这种过于曲折的贝塞尔曲线,我们想通过一系列控制点控制是非常难的,于是人们想到了办法,用较少的几个控制点控制一小段贝塞尔曲线,当想表示的段数足够时,把它们连在一起就是想要的完整的贝塞尔曲线。

如上图中的黑色点就是每段贝塞尔曲线的起止点,而蓝色点则是和黑色起止点相连并控切线方向的点,通过每四个点定义一段贝塞尔曲线,并且最终把它们连起来的方法就是逐段贝塞尔曲线。

逐段贝塞尔怎么确保连续呢?事实上,逐段贝塞尔有许多不同的连续,如上图所示就是逐段贝塞尔的C0连续,它代表只要曲线在中间没有间断,两段曲线都经过一个点(第一段终止点等于第二段起点)。

第二种连续是切线连续,也就是C1连续,两端切线长度要相等,且一阶导数相等。这样不仅能保证几何上的链接,还可以保证光滑。当然我们还有很多其它的连续,比如当二阶导数相等,或者更高阶的导数相等。但在这里我们只介绍这两种。

3.Spline—样条

图形学中运用的曲线不止贝塞尔曲线,还有其它,如样条:一条由一系列控制点控制的一条连续的曲线,在任一点都满足一定的连续性,几阶连续取决于实际情况。

4.B-splines—B样条

B样条也就是basis样条,也就是基函数样条,具有局部性。我们提到当有多个,如十个控制点的时候,想调整一整个曲线是非常困难的,因为一个控制点的调整会影响许多其它控制点,于是我们引入了逐段贝塞尔曲线,但是逐段仍然够简便,所以我们又引入了B样条,它不仅具有局部性,而且是一整段连续的曲线,同时它也比贝塞尔曲线更复杂,这里不做过多介绍。还有更复杂的NURBS,感兴趣的朋友可以自行了解。

二、曲面

1.Bézier Surfaces—贝塞尔曲面

贝塞尔曲面,也就是贝塞尔曲线的扩展, 如上图,我们可以想象有一个4x4的网格,在一个方向上的四条线对应了四条贝塞尔曲线,而在另一个方向坐标值相同的一行,每条曲线上有4个点,它们也会构成一条贝塞尔曲线,那么只要将这条直线一扫,就可以得到一个贝塞尔曲面。当然,这里也有很多问题,比如,不同的贝塞尔曲面,要怎么把它们严丝合缝的拼在一块,这里同样不介绍,感兴趣的朋友自行了解。

 那么如何找到贝塞尔曲面上任意一点的位置,我们可以想到,当扩展成曲面之后,我们则需要两个时间变量t,这里我们设为u和v。

那么我们只要现在如上图的4x4的平面中的的灰线方向找到一个时间u,再在另一个方向,也就是蓝色线上找到一个时间v,就可以找到对应的曲面上的点的位置,这也是为什么贝塞尔曲面是显式表示的原因,因为这也是通过参数映射定义的。

参考:

Lecture 11 Geometry 2 (Curves and Surfaces)_哔哩哔哩_bilibili

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值