• CAGD: 第十一章 Bézier曲面


        第十一章 Bézier曲面

    在第十章,我们利用直积(张量积)的方法,把参数三次曲线扩展成参数双三次曲面。本章仍然运用这一思想,将Bézier曲线拓广成Bézier曲面。

    11.1 Bézier曲面的定义及性质

    给定三维空间个点次参数曲面:

    11.1.1

    称为次Bézier曲面,式中分别是Bernstein基函数和次Bernstein基函数。称为曲面片的控制顶点或Bézier点,逐次用线段连接点列中相邻两点组成的空间网格叫做曲面片的控制网格或Bézier网格

    Bézier曲面是通过用张量积方法将一元Bernstein基推广为二元Bernstein基,来实现由Bézier曲线向Bézier曲面的推广。因此,Bézier曲线的许多性质在Bézier曲面场合下同样成立,具体有以下几条:

    1. 仿射不变性;

    2. 凸包性;

    3. 边界性质。Bézier曲面的四条边界曲线分别是次和Bézier曲线,且四个控制角点位于曲面之上;

    4. 等参数线。固定,那么曲线是一条Bézier曲线,其控制顶点为

    同理,固定,其参数曲线为一条次Bézier曲线,相应的控制顶点为

    然而变差缩减性对Bézier曲面将不再成立。

    11.2 低次Bézier曲面

    实际工程应用中,曲面片的次数通常不宜过高,以不超过5次为宜。否则,Bézier网格对曲面的控制能力将会大为减弱。当然,最为重要的Bézier曲面是的情形,即双三次Bézier曲面片。下面,我们先考虑两类低次曲面,然后专门讨论双三次Bézier曲面片。

    11.2.1 双一次Bézier曲面

    双一次Bézier曲面是双线性插值曲面,通过四个Bézier点,每条边界曲线都是直线段,而且任一等参数线也都是直线段。因此,它是一直纹面,其几何分类就是双曲抛物面(马鞍面)。

    双一次Bézier曲面的方程是:

    11.2.1

    为了证明双一次Bézier曲面是抛物面,我们将曲面片的方程改写为:

    11.2.2

    这里,

    记曲面上的点

    那么

    当四点共面时,由Bézier曲面的凸包性质可知,双一次Bézier曲面为一平面片。否则,三向量不共面,因此矩阵可逆。此时有

    对曲面片做仿射坐标变换:

    那么,在新的仿射坐标系下,双一次Bézier曲面片上任一点的仿射坐标满足方程:

    这就是双曲抛物面只方程。

    11.2.2 双二次Bézier曲面

    对于双二次Bézier曲面片

    来说,其边界曲线和参数坐标曲线均为抛物线。九个Bézier点所组成的控制网格的周围八个顶点决定了曲面片的四条边界曲线,内Bézier点仅影响曲面内部形状,对边界曲线不产生影响。

    Bézier曲面片对Bézier网格的逼近性可知,在固定四条边界线以后,通过顶点之选择,便可使曲面或凸或凹、或臌或瘪。

    11.2.3 双三次Bézier曲面

    双三次Bézier曲面片是工程设计中最为常用的曲面类型,其矩阵表示如下:

    11.2.3

    式中,

    这样以来,对于同一张双三次参数曲面而言,我们有两种表示形式:Bézier形式和Hermite形式,即:

    从而得到双三次Bézier曲面在四个角点处的几何信息:

    因此,有

    11.2.5

    由此可以看出,混合偏导矢反映了内Bézier相对于角点曲面片切平面的扭曲状况,因此角点处的混合偏导矢亦称做"扭矢"(twist)。在Ferguson样条曲面中,假定扭矢为零,即就是内Bézier点分别位于对应角点处的切平面上。

    11.3 de Casteljau算法

    类似于Bézier曲线上点的计算,Bézier曲面上的点的计算亦可由一系列线性插值来完成,对应的算法称之为de Casteljau算法。

    对于给定的Bézier曲面

    参数为的点可计算如下:

    1.

    (11.3.1)

    2.

    (11.3.2)

    按算法1进行时,先以参数值对控制网格沿向的个多边形执行曲线的de Casteljau算法,级递推后,得到沿向的由个顶点构成的中间多边形。再以参数对其执行曲线的de Casteljau算法,级递推后,得到曲面上对应的点。按算法2进行时,先以参数值对控制网格沿向的个多边形执行曲线的de Casteljau算法,级递推后,得到沿向的由个顶点构成的中间多边形。再以参数对其执行曲线的de Casteljau算法,级递推后,同样得到曲面上对应的点

    特别,当时,上述两个算法中的单参数线性插值可合并成双参数线性插值。

    3.

    (11.3.3)

    算法3利用了参数平面上单位正方形区域到控制网格的每个子四边形的仿射参数变换,确定参数域上点对应的诸中间点,执行级双线性插值递推后,得到所求的点

    对于的情况,算法3不能进行到底。在执行级双线性插值递推后,得到由个顶点构成的一个中间多边形。然后,以该多边形方向的参数值对该多边形执行单参数线性插值递推,直到最后得到一个点即为所求曲面上的点。

    当然,上述算法中的任一种所得结果完全相同,其时间复杂度亦完全一样。基于de Casteljau算法编制的程序稳定可靠、直观简便、快速。由于Bézier曲面是Bézier曲线的直接推广,其曲面的计算化解为一系列曲线的计算。基于这一点,采用单参数线性插值方案可直接调用曲线计算的程序,避免了用双线性插值方案重复编程的麻烦。

    11.4 Bézier曲面的分割

    计算Bézier曲面上点的de Casteljau算法之直接应用之一,就是Bézier曲面的分割。给定参数点,那么参数平面上的定义域被其分割成四个子矩形区域。与此相对应的曲面上的点及等参数线一起亦将曲面分割成四块,每一块都是Bézier曲面,因而可表示成Bézier形式,相应的控制顶点就是计算点时,de Casteljau算法产生的一系列中间点,即:

    (11.4.1)

    事实上,中间点有以下显式表示:

    11.4.2

    那么,定义在上的由控制顶点确定次Bézier曲面片为:

    由于

    因此,即为曲面上的那一部分。

    11.5 Bézier曲面的升阶

    Bézier曲面的升阶同样也是Bézier曲线升阶的推广。如果我们把Bézier曲面改写为次曲面,即使:

    11.5.1

    那么,新的控制顶点可确定如下:

    11.5.2

    同样,也可沿向进行升阶,即:

    11.5.3

    则新的控制顶点为:

    11.5.4

    如果沿两个参数方向同时对曲面升阶一次,即:

    11.5.5

    则新的控制顶点为:

    11.5.6

    对于Bézier曲面的升阶可无限进行下去,便可得到一系列开展多面体,它们都定义同一张曲面片。假设将Bézier曲面Bézier曲面,即:

    则新的控制顶点可递推计算如下:

    1.

    (11.5.7)

    或者

    2.

    11.5.8

    或者

    3. 11.5.9

    11.6 Bézier曲面的偏导矢与法矢

    Bézier曲面的偏导矢计算是Bézier曲线导矢计算之推广,相应地有以下计算公式:

    1. 单向导矢:

    (11.6.1)

    (11.6.2)

    其中,向前差分矢量定义如下:

    时,分别得到向参数线的切矢和向参数线的切矢。

    1. 混合偏导矢

    (11.6.3)

    这里,向前差分为:

    由于曲面的偏导矢本身是一Bézier曲面,因此利用de Casteljau算法即可得到如下的偏导矢计算公式:

    (11.6.4)

    (11.6.5)

    (11.6.6)

    这表明,Bézier曲面的偏导矢可作为Bézier曲面的de Casteljau算法的"副产品"同时求出来。

    1. 法矢

    曲面在一点的法矢由该点处的两参数线的切矢所决定,因而法矢的计算公式为:

    (11.6.7)

    特别,在曲面片四个角点处的法矢可简单地予以计算如下:

    11.7 非参数Bézier曲面

    为一二元Bernstein多项式

    其图形是一曲面。如果我们将其看成是一Bézier曲面,那么定义此曲面的Bézier点是什么?为此,我们将改写成参数形式

    由于Bernstein基函数具有多项式精度,所以

    因此

    的Bézier点是:

    平面上的点称为函数的Bézier横标,而则称为Bézier纵标。

    当然,二元Bernstein多项式的定义域并不要求一定是平面上的单位正方形区域,其实的定义域只要是一平行四边形区域即可,例如,若定义域由点和两个向量给出,那么其Bézier横标就是:

    特别,对于二元Bernstein多项式来说,有以下结果:

    image

    欢迎访问我的专业知识博客!
    博主:白途思(begtostudy)
    微信/QQ:370566617
    Email:begtostudy#gmail.com
    欢迎访问我的其他博客:我的编程知识博客 我的学术知识博客

  • 相关阅读:
    volatile 关键字
    C++ 强制类型转换
    HTTP详解2-请求、响应、缓存
    HTTP详解1-工作原理
    C++ 基本知识
    (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
    C++ inline
    P1075 质因数分解
    P1085 不高兴的津津
    P5015 标题统计
  • 原文地址:https://www.cnblogs.com/begtostudy/p/2232852.html
Copyright © 2020-2023  润新知