第5章 曲线与曲面 曲线曲面的计算机辅助设计源于20世纪60年代的飞机和汽车工业。 1963年美国波音公司的Ferguson提出用于飞机设计的参数三次方程; 1962年法国雷诺汽车公司的Bézier于提出的以逼近为基础的曲线曲面设计系统UNISURF,此前de Casteljau大约于1959年在法国另一家汽车公司雪铁龙的CAD系统中有同样的设计,但因为保密的原因而没有公布; 1964年Coons提出了一类布尔和形式的曲面; 1972年,deBoor和Cox分别给出B样条的标准算法; 1975年以后,Riesenfeld等人研究了非均匀B样条曲线曲面,美国锡拉丘兹大学的 Versprille研究了有理B样条曲线曲面,20世纪80年末、90年代初,Piegl和Tiller等人对有理B样条曲线曲面进行了深入的研究,并形成非均匀有理B样条(Non-Uniform Rational B-Spline,简称NURBS); 1991年国际标准组织(ISO)正式颁布了产品数据交换的国际标准STEP,NURBS是工业产品几何定义唯一的一种自由型曲线曲面。
从卫星的轨道、导弹的弹道,到汽车和飞机等的外形,直至日常生活中的图案和花样设计,都离不了对曲线的描述和绘制。以至于可以说,几乎没有一张设计图纸上是没有曲线的。 在我们遇到的各种各样的曲线中,归纳起来,大概不外乎两类:一类是我们已经比较熟悉的,如圆、椭圆、双曲线、正弦余弦、概率分布、摆线螺线等等。这类曲线均可以用一个曲线方程式来表示,称此类曲线为规则曲线。比如圆的方程可以写成 x2+y2 = R2等。
而另有一类曲线,我们尚不能确切给出描述整个曲线的方程,它们往往是由一些从实际中测量得到的一系列离散数据点用曲线拟合方法来逼近的,称为不规则曲线。这些曲线一般采用分段的多项式参数方程来表示,由此形成一条光滑连续的曲线。常见的参数曲线有抛物样条曲线、Hermite曲线、Bezier曲线、和B样条曲线等。 当曲线的数学表达方法确定以后,剩下的问题就是如何把这些曲线绘制出来。要绘制一条指定的曲线函数的直接方法是用很多短直线段来逼近曲线。绘出的曲线的光滑度和精确度取决于我们所选择的数据点的精度和数量。点的数量越多,直线段越短,则连成的曲线愈接近于理想曲线。 至于点的数量取多少,直线段取多长,则取决于我们对所绘制曲线的精度要求和图形输出设备的精度,但我们对所绘制曲线的精度要求不能逾越图形输出设备所实际具有的精度。
规则曲线和曲面的3种坐标表示法 一般平面曲线常用直角坐标、极坐标或参数方程表示,如工程上常用的渐开线、摆线以及正弦余弦曲线等,都是用这三种坐标表示的重要曲线。但从计算机图形学和计算几何的角度看,用参数方程绘制曲线比较方便。 实际上绘制任何平面曲线.都要将曲线方程用参数方程形式表示,即得到曲线上点坐标x与y的分别计算式。于是计算出点的坐标值,调用画线函数或画点函救绘出曲线上的所有点,便得到一条曲线。
曲线的表示形式 (1) 显示表示 y=f(x) 例:y=kx+b (2) 隐式表示 f(x,y)=0 (二维) x2+y2=R2 (3) 参数表示 (二维) (三维) (二维) (三维) (三维)
显式或隐式表示存在下述问题: (1) 与坐标轴相关; 会出现斜率为无穷大的情形(如垂线); (3) 不便于计算机编程。
参数表示的优点: (1) 可以满足几何不变性的要求。 (2) 有更大的自由度来控制曲线、曲面的形状 (3) 对曲线、曲面进行变换,可对其参数方程 直接进行几何变换。 (4) 便于处理斜率为无穷大的情形,不会因此 而中断计算。 (5) 便于用户把低维空间中曲线、曲面扩展到高维空去。 (6) 规格化的参数变量t∈[0, 1],使其相应的几何分量是有界的,而不必用另外的参数去定义边界。 (7) 易于用矢量和矩阵表示几何分量,简化了计算。
参数样条曲线和曲面的常用术语 在工程设计中,一般多采用低次的参数样条曲线。这是因为高次参数样条曲线计算费时,其数学模型难于建立且性能不稳定,即任何一点的几何信息的变化都有可能引起曲线形状复杂的变化。 因此,实际工作中常采用二次或三次参数样条曲线,如: 二次参数样条曲线: P (t) = A0 + A1t + A2t2 三次参数样条曲线: P (t) = A0 + A1t + A2t2 + A3t3 2. 型值点和控制点 所谓型值点,是指通过测量或计算得到的曲线上少量描述曲线几何形状的数据点。由于型值点的数量有限,不足以充分描述曲线的形状,因此通常是在求得一些型值点后,采用一定的数学方法,建立曲线的数学模型,从而再根据数学模型去获得曲线上每一点的几何信息。 所谓控制点,是指用来控制或调整曲线形状的特殊点,曲线段本身不通过该控制点。
2.切线、法线和曲率 当曲线上的点Q趋于M时,割线的极限位置称为曲线在点M处的切线。若参数曲线上任一点的坐标为p(t) = [x(t),y(t),z(t)],则该点的切线方程即为参数曲线在该点处的一阶导函数,即p'(t) = [x'(t),y'(t),z'(t)]。 法线就是垂直切线方向且通过该点的直线。 曲线上两点M和Q的切线的夹角δ与弧长MQ之比,当Q趋于M时的极限,即 称为曲线在M点的曲率。曲率也是切线的方向角对于弧长的转动率,其值为曲线在M处的二阶导数。
y x Q M α dα α+dα ds 曲线的曲率
3.插值、逼近和拟合 插值与逼近是曲线设计中的两种不同方法。插值设计方法要求建立的曲线数学模型,严格通过已知的每一个型值点。而逼近设计方法,顾名思义,用这种方法建立的曲线数学模型只是近似地接近已知的型值点。 而曲线的拟合则是这两种设计方法的统称,是指在曲线的设计过程中,用插值或逼近方法使生成的曲线达到某些设计要求,如在允许的范围内贴近原始的型值点或控制点序列,或曲线看上去很光滑等。
已知y1 = f(x1) y2 = f (x2) 求: (x) y = (x) 插值函数
参数三次曲线曲面 (1)在多项式曲线插值中,当需要满足的插值条件越多时,一般来说多项式曲线的次数也会越高。导致曲线出现扭摆的可能性也就越大。 (2) 而单一的低次多项式曲线又难以描述复杂的曲线。 (3) 将一段低次曲线在满足一定的连接条件下逐段拼接起来。以分段(piecewise)方式定义的曲线构成组合(composite)曲线。 (4) 相应的用分片方法定义的曲面就是组合曲面。
从工程应用的角度讲,曲线曲面可分成两大应用需求:拟合型和设计型。 拟合型: 对已经存在的离散点列构造出尽可能光滑的曲线或曲面,用以直观(而忠实)地反映出实验特性、变化规律和趋势等。 (2) 设计型: 设计人员对其所设计的曲线(曲面)并无定量的概念,而是在设计过程中即兴发挥。 曲线、曲面本身的基础理论和进一步的研究与发展应该属于计算机辅助几何设计(CAGD)的范畴 在计算机图形学中讲授曲线、曲面知识的目的是如何更好地在计算机上显示曲线、曲面,以计算机图形学的优势更好地展示多彩的世界。
参数曲线基础 曲线的表示形式 参数曲线的切矢量、弧长、法矢量、曲率 插值、逼近、拟合及光顺 参数连续性与几何连续性
将t归范化为[0,1]: t=(t-a)/b-a) 参数曲线 将t归范化为[0,1]: t=(t-a)/b-a) a →t t=0; b →t t=1
参数方程的优点: 有更大的自由度来控制曲线、曲面的形状。 形式不依赖于坐标系的选取, 具有形式不变性. 几何变换方便 表示能力强
直线参数方程 P1 P1(x,y) P0 园参数方程 1 t
一条用参数表示的曲线是一个有界的点集,它可以表示为带参数的、连续的、单值的数学函数: 参数曲线的定义 一条用参数表示的曲线是一个有界的点集,它可以表示为带参数的、连续的、单值的数学函数: (规格化)
参数曲线的位置矢量:曲线上任一点的坐标可用其位置矢量表示
当曲线上的点R趋于Q时,割线的极限位置称为曲线在点R处的切线。 参数曲线的切矢量: 当曲线上的点R趋于Q时,割线的极限位置称为曲线在点R处的切线。 它反映曲线上各点的一个坐标(y)关于另一个坐标变量(x)的变化率. dP/dt
切向量(切矢量) 选择弧长s作为参数,则 是单位切矢量 根据弧长微分公式有: 于是有 ,即为单位矢量
法矢量 与切向量 垂直的法矢称为曲线在该点的主法矢量N 矢量积 是第三个单位矢量,它垂直于T和N。把平行于矢量B的法矢称为曲线的副法矢量 我们可以推导出:
T(切矢)、N(主法矢)和B(副法矢)构成了曲线上的活动坐标架 N、B构成的平面称为法平面,N、T构成的平面称为密切平面,B、T构成的平面称为从切平面。
曲率和挠率 (1)曲率 即 称为曲率,其几何意义是曲线的单位切矢对弧长的转动率 曲率k的倒数 称为曲率半径。 (2)挠率 的绝对值等于副法线方向(或密切平面)对于弧长的转动率.
反映曲线的扭挠程度,即曲线在该点处扭出密切面的速率. 参数曲线的挠率 反映曲线的扭挠程度,即曲线在该点处扭出密切面的速率. B(s+s) 平面曲线的密切面即曲线所在平面
曲率 挠率
单位切矢量 挠率 单位副切矢量
用s表示曲线的弧长,以弧长为参数的曲线方程称为自然参数方程。以弧长为参数的曲线,其切矢为单位矢量,记为t(s)。 切矢t(s)对弧长 s求导,所得导矢dt(s)/ds与切矢相垂直,称为曲率矢量,如图7-2,其单位矢量称为曲线的单位主法矢,记为n(s),其模长称为曲线的曲率,记为k(s)。曲率的倒数称为曲线的曲率半径,记为 法平面 密切平面 从切面 t n ρ b P 图7-2 曲线特性分析 与t和n相互垂直的单位矢量称为副法矢,记为b(s)。 由t和n张成的平面称为密切平面;由n和b张成的平面称为法平面;由t和b张成的平面称为从切面。
曲线段间的连续性 曲线间连接的光滑度的度量有两种: (1)函数的可微性(参数连续性):组合参数曲线在连接处具有直到n阶连续导矢,即n阶连续可微,这类光滑度称之为Cn 或n阶参数连续性。 (2) 几何连续性:组合曲线在连接处满足不同于Cn的某一组约束条件,称为具有n阶几何连续性,简记为Gn Cn连续保证Gn 连续, 但反过来不行。也就是说Cn 连续的条件比 Gn 连续的条件要苛刻
曲线段间的连续性 (1) 参数连续性 C0连续(零阶参数连续): 前一曲线段终点与后一曲线段起点相同。 (在邻接点曲线形状可能发生突变, 若以相同的参数间隔移动镜头,会产生移动过程的不连续性.) C1连续(一阶参数连续): 两相邻曲线段连接点处有相同的一阶导数。 C2连续(二阶参数连续): 两相邻曲线段连接点处有相同的一阶导数和二阶导数。 C2连续 C0连续 C1连续
在实际的曲线造型应用中,我们要适当地选择曲线段间的连续性,使造型物体既能保证其光滑性的要求,也能保证其美观性的要求。 (2) 几何连续性(只需在邻接处的导数成比例) G0几何连续 前一曲线段终点与后一曲线段起点相同。 G1几何连续(斜率连续 ) 两相邻曲线段连接点处一阶导数成比例。 G2几何连续 两相邻曲线段连接点处一阶导数和二阶导数成比例。 G2连续性下,两个曲线段在交点处的曲率相等。 在实际的曲线造型应用中,我们要适当地选择曲线段间的连续性,使造型物体既能保证其光滑性的要求,也能保证其美观性的要求。
插值 给定一组有序的数据点Pi,i=0, 1, …, n,构造一条曲线顺序通过这些数据点,称为对这些数据点进行插值,所构造的曲线称为插值曲线。 线性插值:假设给定函数f(x)在两个不同点x1和x2的值,用一个线形函数:y=ax+b,近似代替,称为的线性插值函数。 抛物线插值:已知在三个互异点 x1,x2,x3 的函数值为 y1,y2,y3 ,要求构造一个函数 使抛物线 在结点 处与 在 处的值相等
线性插值 抛物线插值
y = f(x) y = (x) 插值函数
曲线设计基础 Y’ 若 插值曲线和拟合曲线(Interpolate curve and Fit curve) 原始数据点精确 原始数据点不精确 计算机辅助几何设计(CAGD)中的曲线的一般表示形式 由一组基函数及相联系的系数矢量来表示: 采用不同的基函数,曲线的数学表示方法就不同。基函数一旦确定,系数矢量就完全定义了曲线。 X Y X’ Y’ 若 称为规范基。 规范基表示具有几何不变性。即同样的点在不同坐标系中生成的曲线相同。 抛物线方程不具有几何不变性。
参数多项式曲线 n次多项式的全体构成n次多项式空间,在其中任选一组线性无关的多项式都可以作为基。幂基ui (i=0,1,…,n)是最简单的多项式基,相应的参数多项式曲线方程为: 对于给定的n+1个数据点Pi(i=0,1,2,…,n)欲构造其插值曲线或逼近曲线,必先得到对应于各数据点Pi的参数值ui,ui是一个严格递增的序列△U: u0<u1< … <un 采用不同的参数化,得到的曲线也不同。常用的参数化方法: (1) 均匀参数化(等距参数化) (2) 积累弦长参数化 (3) 向心参数化 (4) 修正弦长参数化 对给定数据点实行参数化,将参数值ui代入上述方程,使之满足插值条件: , i=0,1, …,n 得一组线性方程组:
解线性方程组,可得唯一解。幂基多项式曲线方程中的系数矢量几何意义不明确,构造曲线时,需解线性方程组,n较大时,不可取。 其它多项式插值曲线如Lagrange、Newton、Hermite等较之幂基多项式曲线在计算性能等方面有较大改进,但总体上多项式曲线存在两个问题: l 次数增高时,出现多余的拐点; l 整体计算,一个数据点的微小改动,可能引起曲线整体大的波动。
低次多项式组合曲线 由于高次多项式曲线存在缺陷,单一低次多项式曲线又难以描述复杂形状的曲线。所以采用低次多项式按分段的方式在一定连续条件下拼接复杂的组合曲线是较好的选择。 以三次多项式为例: 如何选择基函数使系数具有几何意义,且操作方便,易于修改是曲线曲面设计方法的发展方向。 “线动成面” y2(x)=a2+b2x+c2x2+d2x3 y3(x)=a3+b3x+c3x2+d3x3 y1(x)=a1+b1x+c1x2+d1x3
三次样条曲线曲面 R(x) — 梁的曲率半径 M(x) —作用在梁上的弯矩 E — 材料的弹性模量I — 梁横截面的惯性矩 三次样条函数(Spline) Schoenberg于1946年提出,国外60年代广泛研究,国内70年代开始。 样条曲线的物理背景 样条(spline)是富有弹性的细木条或有机玻璃条。早期船舶、汽车、飞机放样时用压铁压在样条上的一系列型值点上,调整压铁达到设计要求后绘制其曲线,称为样条曲线y(x)。 R(x) — 梁的曲率半径 M(x) —作用在梁上的弯矩 E — 材料的弹性模量I — 梁横截面的惯性矩 在梁弯曲不大的情况下,y´ <<1,简化为:y´´ (x) ~M(x) y(x)是x的三次多项式,这就是插值三次样条函数的物理背景。
物理样条的性质 (1)样条是物质连续的,相当于函数C0连续; (2)样条在压铁两侧斜率相同,相当于函数C1连续; 三次样条函数的数学描述 在区间[a,b]上给定一个分割:a=x1<x2<•••<xn=b,则称在区间[a,b]上满足下列条件的函数S(x)为三次样条函数: (1)在每个子区间[xi-1,xi](i=1,2, ••• ,n)上为三次多项式; (2)在整个区间[a,b]上具有直到二阶连续的导数,即在内节点xi处, i=2,3, •••,n-1, k=0,1,2 (3)给定一组型值点(xi,yi)(i=1,2, ••• ,n), S(x)满足S( xi )= yi, 则称S(x)为插值三次样条函数; S(x)=ai+bix+cix2+di x3 i=1,2,…,n S(xi-1)=yi-1 S(xi)=yi S’(xi-1)=ti-1 S’(xi)=ti (xi-1,yi-1) (xi,yi) ti-1 ti
用型值点处的一阶导数表示插值三次样条函数―m关系式 插值三次样条函数有两种常用的表达方式,一种是用型值点处的一阶导数表示的m关系式;一种是用型值点处二阶导数表示的M关系式。本书重点介绍m关系式。 用型值点处的一阶导数表示插值三次样条函数―m关系式 给定一组型值点(xi,yi)(i=1,2, ••• ,n),mi为(xi,yi)处的斜率。第i段样条函数可表示为: 该段曲线的首端通过(xi-1,yi-1),斜率为mi-1,末端通过(xi,yi),斜率为mi,样条连续条件可表达为: yi(x)=ai+bix+cix2+dix3 (xi-1,yi-1) (xi,yi) mi-1 mi (x0,y0) (xn,yn) mn m0 图7-4 型值点和斜率 (xi+1,yi+1) mi+1 yi+1(x)=ai+1+bi+1x+ci+1x2+di+1x3 将yi(x)代入,得:
将所求系数代入样条函数表达式,得:
式中xi-1≤x≤xi(i=1,2,…,n) 上述公式为插值三次样条函数的基本公式。只要求解出型值点处的斜率mi (i=0,1,2,…,n), 就可以应用上述公式计算插值三次样条函数的函数值、一阶导数和二阶导数。 以(xi-1+hi)代替xi,代入yi(x)的表达式,并按(x-xi-1)的幂次整理成如下矩阵表达式:
插值三次样条函数的矩阵表达式: Hermite曲线 式中xi-1≤x≤xi(i=1,2,…,n) 若令hi=1,t=x-xi-1,0≤t≤1,则得到均匀参数插值三次样条。 1963年美国波音公司的Ferguson用于飞机设计的参数三次方程即是均匀参数插值三次样条曲线: 其中P(t)表示位置矢量,P′(t)表示切矢 Hermite曲线 由上述样条函数公式可以看出,构造插值三次样条时除已经给定的型值点外,还必须得到型值点处的切矢。为了计算型值点处的切矢mi(i=0,1,2,…,n),可以利用前、后二曲线段在型值点处的二阶导数连续的条件:
Hermite曲线 三次参数多项式及其矩阵表示
三次参数矩阵表示
矢量pi没有明显的几何意义,需将矩阵A进一步分解:A = MB 使 几何矩阵 B=[Bn,Bn-1,…,B0] 中的各分量有明显的几何意义. Bi称为控制点 基矩阵M是(n+1)*(n+1)矩阵,它将矩阵 B变为矩阵A.
使几何矩阵B=[Bn , Bn-1 ,…, B0 ]的各分量有较直观的几何意义(称为控制顶点), B称为几何矩阵, M称为基矩阵. 为使矩阵有明确的几何意义,令A=M.B 使几何矩阵B=[Bn , Bn-1 ,…, B0 ]的各分量有较直观的几何意义(称为控制顶点), B称为几何矩阵, M称为基矩阵. 三次参数矩阵表示 可控制形状的参数:切矢量、法矢量、曲率、挠率等等
直线矩阵表示 例:参数直线段
三次Hermite曲线 给定曲线的两个端点: P0 , P1,及两端点处的切线: R0 , R1;则满足下列条件的三次多项式曲线为Hermit曲线:
设Hermit曲线的几何矩阵为BH,基矩阵为MH。(A=MH.BH)则 三次参数矩阵表示
取BH=[P0 P1 R0 R1]T,则
上列方程的解不是唯一的,取
TMH确定了一组Hermit基函数(调合函数) 四个基函数:
TMH确定了一组Hermit基函数(调合函数) F3 F1 F2 F0
F3 F2 F1 F0
三次Hermit曲线 三次Hermit曲线方程为 调合函数 给定直线的两个端点: P0, P1,及两端点处的切线: R0, R1 则Hermit曲线的几何矩阵GH和基矩阵MH分别为 三次Hermit曲线方程为 其中TMH确定了四个基函数 调合函数
三次Hermit曲线 杨钦P185公式
Hermite样条曲线是以法国数学家Charles Hermite命名的,是一个分段三次多项式并在每个型值点有给定的切线。Hermite样条曲线可以局部调整,因为每个曲线段仅依赖于端点约束。 整个曲线通过所有的型值点,而对于每个曲线段来说,它通过两个相邻的型值点。我们把这两个点作为该段曲线的起点和终点,设为P0点和P1点。并且假定曲线段在两端点处的切矢为已知,分别设为 P‘0和 P’1。曲线的参变量t是在两个端点取值0和1之间变化。 P0(t0=0) P’0 P1(t1) P’1
三次Hermite曲线 形状控制:改变端点位置矢量; 调节切矢量(方向和大小) 调节切矢量方向
形状控制:改变切矢量的长度。 R0,R1方向与P0,P1 不变,R0,R1长度变 化 R0=Q0-P0 R1=Q1-P1 (Q0和Q1分别为空间位置矢量)
例:二维Hermite曲线 设P0=[100,100];P1=[200,150]; Q0=[-200,100];Q1=[-100,120]; Y Q1 -200 100 Q0 P0 -100 120 P1(200,150) (100,100) x (0,0)
三次Hermite曲线的生成
count=100; deltat=1/count; t=0.0; PX(1)=P0(1); PY(1)=P0(2); Q0=[-200,100];Q1=[-100,120]; count=100; deltat=1/count; t=0.0; PX(1)=P0(1); PY(1)=P0(2); for i=1:count t=t+deltat; F3=2*t*t*t-3*t*t+1; F2=-2*t*t*t+3*t*t; F1=t*t*t-2*t*t+t; F0=t*t*t-t*t;
+F1*Q0(1)+F0*Q1(1); PY(i+1)=F3*P0(2)+F2*P1(2) +F1*Q0(2)+F0*Q1(2); end PX(i+1)=F3*P0(1)+F2*P1(1) +F1*Q0(1)+F0*Q1(1); PY(i+1)=F3*P0(2)+F2*P1(2) +F1*Q0(2)+F0*Q1(2); end figure;plot(PX,PY); axis equal; %每个坐标轴具有均匀的间隔 title('P0=[100,100];P1=[200,150];Q0=[-200,100];Q1=[-100,120];');
100 -200
plot(PX,PY); plot(PX,PY,PX,PY,'o');
void CHlineView::OnDraw(CDC* pDC) { CHlineDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here int p0[2]={300,150}; int p1[2]={300,350}; int R0[2]={-500,0}; int R1[2]={-500,0}; int count=1000,i; float deltat; float t=0.0,F3,F2,F1,F0; float xf,yf; int x,y; deltat=1.0/count; pDC->SetPixel(p0[0],p0[1],(COLORREF)0x00000000); for(i=1;i<count;i++) t=t+deltat; F3=2*t*t*t-3*t*t+1; F2=-2*t*t*t+3*t*t; F1=t*t*t-2*t*t+t; F0=t*t*t-t*t; xf=F3*p0[0]+F2*p1[0]+F1*R0[0]+F0*R1[0]; yf=F3*p0[1]+F2*p1[1]+F1*R0[1]+F0*R1[1]; pDC->SetPixel(xf,yf,(COLORREF)0x00000000); }
p0[2]={300,150}; p1[2]={300,350}; R0[2]={-500,0}; R1[2]={-500,0};
void CHimiteNEWView::OnDraw(CDC* pDC) { CHimiteNEWDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here int p0[2]={300,150}; int p1[2]={300,350}; int R0[2]={-500,0}; int R1[2]={-500,0}; int count=1000,i; float deltat; float t=0.0,F3,F2,F1,F0; float x,y; deltat=1.0/count; x=p0[0]; y=768-p0[1]; pDC->SetPixel(x,y,(COLORREF)0x00000000); for(i=1;i<count;i++) t=t+deltat; F3=2*t*t*t-3*t*t+1; F2=-2*t*t*t+3*t*t; F1=t*t*t-2*t*t+t; F0=t*t*t-t*t; x=F3*p0[0]+F2*p1[0]+F1*R0[0]+F0*R1[0]; y=F3*p0[1]+F2*p1[1]+F1*R0[1]+F0*R1[1]; y=768-y; }
p0[2]={300,150}; p1[2]={300,350}; R0[2]={-500,0}; R1[2]={-500,0};
p0[2]={100,450}; p1[2]={700,650}; R0[2]={-400,700}; R1[2]={-700,200};
p0[2]={300,350}; p1[2]={310,255}; R0[2]={500,-800}; R1[2]={-600,-760};
p0[2]={300,350}; p1[2]={400,350}; R0[2]={500,500}; R1[2]={500,-500};
如两条二维Hermite三次曲线段在连接点有相同的函 数值和一阶导数值,这样的得到的曲线是C1连续的。
Bezier曲线 在上面讨论的三次插值样条曲线中,它们的共同特点是:最终生成的曲线通过所有给出的型值点,我们称之为“点点通过”。通过以上的讨论,我们可以看到,这种曲线的计算和编程都比较简单易行,并且分别使曲线达到了一阶和二阶连续.这已经可以满足一般的工程应用问题了,所以应用较广。 但在外形设计中,比如船舶和汽车的外形设计,初始给出的型值点往往并不精确,并且有些地方完全仅仅是为了外观上的考虑。在这样的一种应用前提下,去一点一点地插值计算并使曲线点点通过不很合算。
另外,在外形设计中,最好能使设计的结果灵活直观地反映出来,比如局部修改型值点也能在外形上得到直观的反映,以便于设计者进行交互式设计操作。这些,前面所介绍的插值样条曲线都是不够的。 为了改善这种情况,法国Bezier提出了一种新的参数曲线逼近方法,称作Bezier曲线。后来Gordon, Riesenfeld和Forrest等人对Bezier曲线进行了修改和发展,提出了B样条曲线。这两种曲线都因能较好地适用于外形设计的特殊要求而获得了广泛的应用。 Bezier曲线的形状是通过一组多边折线(也称为Bezier多边形或特征多边形)的各项唯一地定义出来的。
在该多边折线的各顶点中,只有第一点和最后一点是在曲线上的,其余的顶点则用来定义曲线的导数、阶次和形状。第一条边和最后一条边则表示出了曲线在起点处和终点处的切线方向,即第一条边和最后一条边分别和曲线在起点和终点处相切。曲线的形状趋向于多边折线的形状。改变多边折线的顶点位置和曲线形状的变化有着直观的联系。图列举了一些贝Bezier多边折线和相应的Bezier曲线的形状关系。 P0 P1 P2 P3 P0 P1 P2 P3 P0 P1 P2 P3 Bezier曲线
Bezier曲线将函数逼近与几何表示相结合. 满足以下条件的一组折线集(Bezier 特征多边形)称为Bezier曲线:曲线的起点和终点与多边形的起点和终点重合,多边形的第一条边和最后一条边表示曲线在起点和终点的切矢量方向。曲线的形状趋向于Bezier特征多边形的形状. Bezier曲线将函数逼近与几何表示相结合.
控制顶点 折线集P0P1P2P3…Pn控制多边形 当给定Bezier 特征多边形的n+1个顶点Pi时, Bezier曲线的逼近公式为 : (权Bi,n(t) i=0,1,2,3,…n+1称为基函数)。 控制顶点 折线集P0P1P2P3…Pn控制多边形 Bernstein(伯恩斯坦)基函数(调合函数),也就是Bezier多边形的各顶点位置向量之间的调和函数。
Bernstein(伯恩斯坦)基函数(调合函数)性质: (1)正性:对于所有的 i、 n及0t 1,均有Bi,n0 成立,且 Bi,n(0) = Bi,n(1) =0 (2)规范性: (3)对称性: (4) 递推性: (5)可导性
0到3次Bernstein调和函数的图形
Bezier曲线的性质 1) 端点 C(0)=P0, C(1)=Pn 2) 端点切矢量 由Bernstein基函数的端点性质可以推得,当t=0时,P(0)=P0 ;当t=1时,P(1)=Pn。由此可见,Bezier曲线的起点、终点与相应的特征多边形的起点、终点重合。 3)对称性: 顶点次序颠倒,其形状不变. 4)几何不变性:曲线的位置和形状只与特征多边形的顶点位置有关,不依赖于坐标系的选取。
5) 凸包性(convex hull): 曲线位于特征多边形的顶点的凸包内 6)变差缩减性:平面Bezier曲线与此平面内任一直线的交点个数不 多于其相应特征多边形与该直线的交点数.其几何意义是: Bezier曲线比其特征多边形更光滑.
一次 Bezier曲线(n=1) 控制顶点 折线集P0P1控制多边形 矩阵表示 一次Bezier曲线被表示为1+1个控制顶点 的加权和。权Bi(t) i=0,1称为基函数。
二次 Bezier曲线(n=2) 控制顶点 矩阵表示 二次Bezier曲线被表示为2+1个控制顶点 的加权和。权Bi(t) i=0,1,2称为基函数。
三次 Bezier曲线的插值公式为 : (权Bi(t) i=0,1,2,3称为基函数)。 控制顶点 折线集P0P1P2P3控制多边形
p2 p1 P(t) p3 p0
三次Bezier曲线(n=3) 将C(t)写成矩阵形式得三次Bezier曲线的 矩阵表达式
三次Bezier曲线矩阵表示 调合函数BZ B0,3(t) B2,3(t) B1,3(t) B3,3(t) 1 t
三次Bezier曲线矩阵表示 杨钦P189公式 d0 d1 d2 d3 di为绝对位置矢量
三次Bezier曲线的生成
P0=[100,100];P1=[200, 450]; P2=[400,600];P3=[500,150]; count=100; deltat=1/count; t=0.0; PX(1)=P0(1); PY(1)=P0(2); for i=1:count t=t+deltat; B0=1-3*t+3*t*t-t*t*t; B1=3*t-6*t*t+3*t*t*t; B2=3*t*t-3*t*t*t; B3=t*t*t;
figure;plot(PX,PY,PX,PY,'o'); PX(i+1)=B0*P0(1)+B1*P1(1) +B2*P2(1)+B3*P3(1); PY(i+1)=B0*P0(2)+B1*P1(2) +B2*P2(2)+B3*P3(2); end figure;plot(PX,PY,PX,PY,'o'); title('P0=[100,100];P1=[200,150];P2=[-200,100];P3=[-100,120];');
p2 p1 P(t) p3 p0
Bezier曲线的拼接及其连续性 (1)达到G0连续的充要条件是:Q0=P3 设有两条Bezier曲线P(t)和 Q(t),其控制顶点分别为: P0, P1, P2,…,Pm 和Q0, Q1, Q2,…,Qn (1)达到G0连续的充要条件是:Q0=P3
Bezier曲线的拼接及其连续性 (2)达到G1连续的充要条件(Pm-1,Pm=Q0,Q1三点共线)
P2 P1 Q2 P3 Q0 Q3 P0 Q1
P2 Q2 P3 Q0 P0 Q3 Q1 P1
(3)要使它们达到G2连续的充要条件是:在G1连续的条件下, 并满足方程 。
NB 拟局部性
Bezier曲线的顶点反求 已知Bezier曲线的上给定参数处的位置矢量和参数阶次,利用Bezier曲线的定义和端点特性,可列出一组方程,求解方程组,就可得到相应控制顶点. 例:已知曲线上四个点分别为:Q0(120,0), Q1(45,0), Q3(0,45), Q4(0,120) 4个点相应参数为:t=0,1/3,2/3,1 解: 由三次Bezier曲线端点性质及曲线展开式:
P0(120,0), P1(35,-27.5), P2(-27.5,35), P3(0,120), 将Q0, Q1, Q3, Q4的 坐标代入方程组,可求得: P0(120,0), P1(35,-27.5), P2(-27.5,35), P3(0,120),
Bezier曲线的不足之处: ①确定了多边形的顶点数(m个),也就决定了所定义的贝济埃曲线的阶次(m–1次),这样很不灵活。 ②当顶点数(m)较大时,曲线的阶次将比较高。此时,多边形对曲线形状的控制将明显减弱。 ③调和函数的值在开区间(0, 1)内均不为零。因此,所定义的曲线在(0<t<1)的区间内的任何一点均要受到全部顶点的影响。即改变其中任一个顶点的位置,将会对整条曲线产生影响,因而对曲线进行局部修改将成为不可能。
B样条曲线 1972年,Gordon、Riesenfeld等人发展了1946年Schoenberg提出的样条方法 , 提出了B样条方法。 用n次B样条基函数替换了伯恩斯坦基函数,构造了B样条曲线。B样条曲线除了保持了Bezier所具有的优点外,还增加了可以对曲线进行局部修改这一突出的优点。除此之外,它还具有对特征多边形更逼近,多项式阶次较低等优点。因此,B样条曲线在外形设计中得到了广泛的重视和应用。 由B样条基函数代替Bezier曲线中底Bernstein基函数,即B样条曲线。
B样条曲线 当给定特征多边形的n+1个顶点Pi(i=0,1,2,..,n)时, K次B样条曲线的插值公式为(B样条曲线基函数) : (权Ni,k(u) i=0,1,2,3,…n+1称为基函数,即调合函数)。
设Pi (i=0,1,2,3,…n) 为给定空间的n+1个顶点 (即B样条曲线特征多边形的n+1个顶点),则k次(k+1阶)的表 达式为: k次B样条曲线可达到k–1阶连续。 调合函数
B均匀样条曲线的矩阵表示 第i段一次(k=1)B样条曲线矩阵表示为: 第i段二次(k=2)Bezier曲线矩阵表示为: (P312)
第i段三次均匀B样条曲线矩阵表示
●局部性: 三次B样条曲线只被相邻的4个顶点所控制,而与其它顶点无关。当移动一个顶点时,只对其中二段曲线有影响,并不对整段曲线有影响。 ●端点及连续性(扩展性): 如果对特征多边形P0P1P2P3,增加一个顶点P4,则特征多边形P1P2P3 P4生成的三次B样条曲线与P0P1P2P3生成的三次B样条曲线在连接点的一阶和二阶导数都是连续的。 ●局部性: 三次B样条曲线只被相邻的4个顶点所控制,而与其它顶点无关。当移动一个顶点时,只对其中二段曲线有影响,并不对整段曲线有影响。 ●几何不变性:曲线的形状与特征多边形各顶点的相对位置有关,而与坐标系的选择无关。
三次均匀B样条曲线的生成 第i段三次均匀B样条曲线的生成 均匀B样条曲线:
我们来讨论一下三次B样条曲线的端点性质。 由上式可以进一步推导得: 与书P193公式比较 我们来讨论一下三次B样条曲线的端点性质。 由上式可以进一步推导得:
∵ P(t)= [(1–t)3 P0+ (3t3 – 6t2 + 4) P1+ (-3t3 + 3t2 +3t + 1) P2+ t3P3] P ’(t)= [-3(1–t)2 P0+ (9t2 – 12t ) P1+ (-9t2 + 6t+3) P2+ 3t2P3] P”(t)= [6(1–t) P0+ (18t – 12 ) P1+ (-18t + 6) P2+ 6tP3] ∴ 以t 的端点值代入,得 (三次B样条曲线在端点处的性质):
该点的二阶导数P’’(0)等于中线矢量P1Pm的二倍, 三次B样条曲线曲线段的起点P(0)位于△P0P1P2底边P0P2的中线P1Pm上,且距P1点的三分之一处。该点处的切矢P`(0)平行于△P0P1P2的底边P0P2,且长度为其二分之一。 该点的二阶导数P’’(0)等于中线矢量P1Pm的二倍, P0 P1 P2 P3 P4 P’(0) P(0) P”(0) P”(1) P(1) P’(1) Pm 三次B样条曲线段
这就证明了,三次B样条曲线可以达到二阶连续。 同理,对于终点P(1)处的情形与此相应。如果在B特征多边形上增加了一个顶点P4,那么P1P2P3P4又可定义一段新的三次B样条曲线。因为新曲线段起点的有关数据和上一段曲线的终点的有关数据都只和P1、P2、P3三点有关,所以该二段曲线在连接处的位置矢量,一阶切矢和二阶切矢都应相等,即: P'1(1) = P'2(0) P''1(1) = P''2(0) 这就证明了,三次B样条曲线可以达到二阶连续。 P0 P1 P2 P3 P4 P’(0) P(0) P”(0) P”(1) P(1) P’(1) Pm
改变该顶点只改变第1和第2段,对其它段没有影响
例:给定七个控制顶点:P1(0,0), P2(1,1), P3(2,2), P4(4,0), P5(6,-4), P6(8,-5), P7(10,2) 试用其绘制三次Bezier曲线和三次均匀B样条曲线. 问:可绘制几段三次Bezier曲线 可几段三次均匀B样条曲线. 解:n=7,可绘制2 段三次Bezier曲线 可绘制n-3=7-3=4段三次均匀B样条曲线.
y 三次Bezier曲线 x 不连续
三次Bezier曲线 不连续 连续
%三次Bezier曲线 clear; clc; P1=[0,0]; P2=[1,1]; P3=[2,2]; P4=[4,0]; P5=[6,-4]; P6=[8,-5]; P7=[10,2]; %绘制第一段曲线 t=0.0; count=1000; deltat=1/count; for i=1:count+1 B0=1-3*t+3*t*t-t*t*t; B1=3*t-6*t*t+3*t*t*t; B2=3*t*t-3*t*t*t; B3=t*t*t; PX(i)=B0*P1(1)+B1*P2(1) +B2*P3(1)+B3*P4(1); PY(i)=B0*P1(2)+B1*P2(2) +B2*P3(2)+B3*P4(2); t=t+deltat; end figure;plot(PX,PY,'blue'); PXX=[P1(1),P2(1),P3(1),P4(1)]; PYY=[P1(2),P2(2),P3(2),P4(2)]; hold on; plot(PXX,PYY,':red',PXX,PYY,'o'); %绘制第2 段曲线 t=0.0; count=1000; deltat=1/count; for i=1:count+1 B0=1-3*t+3*t*t-t*t*t; B1=3*t-6*t*t+3*t*t*t; B2=3*t*t-3*t*t*t; B3=t*t*t; PX(i)=B0*P4(1)+B1*P5(1) +B2*P6(1)+B3*P7(1); PY(i)=B0*P4(2)+B1*P5(2) +B2*P6(2)+B3*P7(2); t=t+deltat; end plot(PX,PY,'red'); PXX=[P4(1),P5(1),P6(1),P7(1)]; PYY=[P4(2),P5(2),P6(2),P7(2)]; hold on; plot(PXX,PYY,':red',PXX,PYY,'o');
B0=(-t*t*t+3*t*t-3*t+1)/6; B1=(3*t*t*t-6*t*t+4)/6; clear; clc; P1=[0,0]; P2=[1,1]; P3=[2,2]; P4=[4,0]; P5=[6,-4]; P6=[8,-5]; P7=[10,2]; t=0.0; count=1000; deltat=1/count; %绘制第一段曲线 for i=1:count+1 B0=(-t*t*t+3*t*t-3*t+1)/6; B1=(3*t*t*t-6*t*t+4)/6; B2=(-3*t*t*t+3*t*t+3*t+1)/6; B3=t*t*t/6; PX(i)=B0*P1(1)+B1*P2(1) +B2*P3(1)+B3*P4(1); PY(i)=B0*P1(2)+B1*P2(2) +B2*P3(2)+B3*P4(2); t=t+deltat; end figure;plot(PX,PY,‘blue’);函数hold on; PXX=[P1(1),P2(1),P3(1),P4(1)]; PYY=[P1(2),P2(2),P3(2),P4(2)]; plot(PXX,PYY,':red',PXX,PYY,'o'); %绘制第2 段曲线 t=0.0; for i=1:count+1 B0=(-t*t*t+3*t*t-3*t+1)/6; B1=(3*t*t*t-6*t*t+4)/6; B2=(-3*t*t*t+3*t*t+3*t+1)/6; B3=t*t*t/6; PX(i)=B0*P2(1)+B1*P3(1) +B2*P4(1)+B3*P5(1); PY(i)=B0*P2(2)+B1*P3(2) +B2*P4(2)+B3*P5(2); t=t+deltat; end plot(PX,PY,'red'); PXX=[P2(1),P3(1),P4(1),P5(1)]; PYY=[P2(2),P3(2),P4(2),P5(2)]; hold on; plot(PXX,PYY,':red',PXX,PYY,'o');
%绘制第3段曲线 t=0.0; for i=1:count+1 B0=(-t*t*t+3*t*t-3*t+1)/6; B1=(3*t*t*t-6*t*t+4)/6; B2=(-3*t*t*t+3*t*t+3*t+1)/6; B3=t*t*t/6; PX(i)=B0*P3(1)+B1*P4(1) +B2*P5(1)+B3*P6(1); PY(i)=B0*P3(2)+B1*P4(2) +B2*P5(2)+B3*P6(2); t=t+deltat; end plot(PX,PY,'blue'); PXX=[P3(1),P4(1),P5(1),P6(1)]; PYY=[P3(2),P4(2),P5(2),P6(2)]; hold on; plot(PXX,PYY,':red',PXX,PYY,'o'); %绘制第4段曲线 t=0.0; for i=1:count+1 B0=(-t*t*t+3*t*t-3*t+1)/6; B1=(3*t*t*t-6*t*t+4)/6; B2=(-3*t*t*t+3*t*t+3*t+1)/6; B3=t*t*t/6; PX(i)=B0*P4(1)+B1*P5(1) +B2*P6(1)+B3*P7(1); PY(i)=B0*P4(2)+B1*P5(2) +B2*P6(2)+B3*P7(2); t=t+deltat; end plot(PX,PY,'red'); PXX=[P4(1),P5(1),P6(1),P7(1)]; PYY=[P4(2),P5(2),P6(2),P7(2)]; hold on; plot(PXX,PYY,':red',PXX,PYY,'o');
y x 三次均匀B样条曲线. P2(2,2) P6(10,2) P1(1,1) P3(4,0) P0(0,0) P4(6,-4)
B样条曲线的基函数是局部支撑的,修改一个数据点,在修改处影响最大,对其两侧的影响快速衰减,其影响范围只有前后各K段曲线,对曲线的其它部分没有影响。这是计算机辅助几何设计所需要的局部修改性。均匀B样条曲线未考虑曲线数据点的分布对参数化的影响,当曲线弦长差异较大时,弦长较长的曲线段比较平坦,而弦长较短的曲线段则臌涨,甚至于因过“冲”而产生“纽结”
k次B样条曲线的标准节点向量T 对n+1个控制点的标准结点向量T和 k 次B样条的描述如下: (1)共有m=n+k+2个结点:T={t0, t1,…, tn}。 (2) 前k+1个结点t0, t1,…, tk的值都为0,(前k+1个基数从t=0开始)。 (3)结点依次递增1, 值从1到 n-k (4)最后一个结点的值为n+1-k 例: 8个控制点生成 k=2次B样条曲线的标准结点向量 T=(0,0,0,1,2,3,4,5,6,6,6) 例: 8个控制点生成 k=3次B样条曲线的标准结点向量 T=(0,0,0,0,1,2,3,4,5,5,5,5)
非均匀B样条曲线 考虑曲线弦长的影响,则曲线的基函数不再具有同样的格式,必须根据给定数据点进行弦长参数化,然后根据基函数的定义用如下的曲线方程计算各段曲线上的点: 非均匀B样条 非均匀B样条曲线考虑了弦长的影响,曲线不会因为节点分布不均匀而产生过冲和纽结。非均匀B样条曲线比均匀B样条曲线具有更好的光顺性。 均匀B样条
非均匀B样条曲线的实现 根据曲线方程,计算曲线上的点需要对应参数区间上的基函数的值和控制多边形的顶点。基函数的值根据给定数据点的参数化进行计算。 控制多边形的顶点依据曲线是否通过给定数据点确定,若生成的曲线不通过给定数据点,则给定数据点就是控制多边形顶点。 若生成的曲线通过给定数据点,则首先必须根据给定数据点反求控制多边形的顶点,然后再代入曲线。
有理样条曲线 非均匀B样条考虑节点分布不匀称的影响,但与所有已介绍的计算曲线一样,非均匀B样条不能精确表达二次曲线曲面,采用有理B样条,可以统一表达自由曲线曲面和二次曲线曲面。 有理函数是两个多项式之比。因此,有理样条(rational spline)是两个样条函数之比。有理B样条曲线可以用向量描述为: 称此参数曲线为以d1,d1,…,dn为控制多边形,以ω1, ω2,…,ωn为权的 k 次有理B样条曲线。 其中,; Ni,K(u)是B样条的基函数, di 是n+1个控制点位置,参数ωi 是控制点的权因子。一个特定的ωi 值越大,曲线越靠近该控制点 di。当所有权因子都设为1时,得标准B样条曲线,因为这时方程中的分母为1(混和函数之和)。 当Ni,K(u)是均匀基函数时,p(u)为均匀有理B样条曲线; 当Ni,K(u)是非均匀基函数时,p(u)为非均匀有理B样条 (Non-Uniform Rational B-Spline ,简称NURBS)曲线.
B样条曲线是分段多项式,有理B样条曲线是分段有理多项式。它在各节点 ti 处具有与B样条曲线同样的连续阶。它具有与B样条曲线同样的凸包性、几何不变性、保凸性、变差缩减性、局部调整性、造型灵活性等性质。 B样条曲线是有理B样条曲线的特例,即是各权ωi全相等的有理B样条曲线。 有理Bezier也是有理B样条曲线的特例 二次有理B样条曲线也可以表示圆、椭圆等二次曲线和更复杂的曲线。若在二次有理B样条曲线公式中取权函数为下列值: 则二次有理B样条表达式为 然后用下列参数r值可得各种二次曲线
不同参数r值的二次曲线 P1 P0 双曲线(r>1/2, ω1>1) 抛物线(r=1/2, ω1=1)
有理样条与非有理样条相比有两个重要的优点。第一,提供了二次曲线的精确表达式,如圆和椭圆。非有理样条,表达式为多项式,仅能逼近二次曲线。这使图形包可用一个表达式——有理样条来模拟所有曲线形状,无需用一个曲线函数库去处理不同的设计形状。 有理样条的另一个优点是对于透视观察变换是不变的。这意味着我们可以对有理曲线上的控制点应用一个透视观察变换来得到曲线的正确视图。而另一方面,非有理样条关于透视观察变换是可变的。通常,图形设计包用非均匀节点向量表达式来构造有理B样条,这种样条称为NURBs(Non-Uniform Rational B-spline)。 齐次坐标表达式用于有理样条,这是因为分母可以看成是在控制点四维表达式中的齐次因子。这样,一个有理样条可以看作四维非有理样条投影到三维空间中。
有理样条与非有理样条相比有两个重要的优点: (1)一,提供了二次曲线的精确表达式,如圆和椭圆。非有理样条,表达式为多项式,仅能逼近二次曲线。这使图形包可用一个表达式——有理样条来模拟所有曲线形状,无需用一个曲线函数库去处理不同的设计形状。 有理样条的另一个优点是对于透视观察变换是不变的。这意味着我们可以对有理曲线上的控制点应用一个透视观察变换来得到曲线的正确视图。而另一方面,非有理样条关于透视观察变换是可变的。通常,图形设计包用非均匀节点向量表达式来构造有理B样条,这种样条称为NURBs(Non-Uniform Rational B-spline)。 齐次坐标表达式用于有理样条,这是因为分母可以看成是在控制点四维表达式中的齐次因子。这样,一个有理样条可以看作四维非有理样条投影到三维空间中。
非均匀有理B样条(NURBS)曲线 (3)对插入节点、修改、分割、几何插值等的处理工具比较有力; (4)具有透视投影变换和仿射变换的不变性; 均匀B样条函数的特点是节点的参数轴的分布是等距的,因而不同节点矢量生成的B样条基函数所描绘的形状是相同的。在构造每段曲线时,若采用均匀B样条函数,由于各段所用的基函数都一样,故计算简便。非均匀B样条函数其节点参数沿参数轴的分布是不等距的,因而不同节点矢量形成的B样条函数各不相同,需要单独计算,其计算量比B样条大得多。尽管如此,近年来NURBS有了较快的发展和较广泛的应用,主要原因是: (1)对标准的解析形状(如圆锥曲线、二次曲面、回转面等)和自由曲线、曲面提供了统一的数学表示,无论是解析形状还是自由格式的形状均有统一的表示参数,便于工程数据库的存取和应用; (2)可通过控制点和权因子来灵活地改变形状; (3)对插入节点、修改、分割、几何插值等的处理工具比较有力; (4)具有透视投影变换和仿射变换的不变性; (5)非有理B样条、有理及非有理Bezier曲线是NURBS的特例表示。
NURBS曲线是由分段有理B样条多项式基函数定义的,形式是: 其中di是特征多边形顶点位置矢量,Ni,k(t)是第i个k次B样条基函数,ωi是相应控制点di 的权因子,节点向量中节点个数m=n+k+1,n为控制点数,k为B样条基函数的次数。 节点矢量T={α, …,α, tk+1,…,tn, β,…,β}, k+1个 k+1个 对于非周期函数,若有一个正实数D,对全部k≤j≤n,存在tj+1-tj=D,则称T为均匀节点矢量,否则为非均匀节点矢量。 如取α=0,β=1。由上式和节点矢量T定义的t∈[0,1]区间上的整条NURBS曲线与Bezier曲线相似,即曲线过起、终点,且起、终点的切矢量是控制多边形的第一条和最后一条边。
二次NURBS曲线可用于表示圆锥曲线。 若二次NURBS函数的节点矢量T={0,0,0,1,1,1},则其转变为二次有理Bezier函数,进而可用二次有理Bezier函数表示圆锥曲线。 若二次NURBS函数的节点矢量为均匀节点矢量,即ti+1-ti=d(常数),为简化讨论,令d=1,则其转变为二次有理B样条函数,此时可用二次有理B样条函数表示圆锥曲线。 目前应用NURBS中还有一些难于解决的问题: (1)比一般的曲线定义方法更费存储空间和处理时间; (2)权因子选择不当会造成形状畸变; (3)对搭接、重叠形状的处理相当麻烦; (4)象点的映射这类算法在NURBS情况下会变得不太稳定。这些问题还希望读者在学习和应用中加以解决。
有理样条与非有理样条相比有两个重要的优点: (1)有理样条选择合适的控制点和权值,可以得到了二次曲线的精确表达式,如圆和椭圆。这使图形包可用一个表达式有理样条来模拟所有曲线形状,无需用一个曲线函数库去处理不同的设计形状。 非有理样条,表达式为多项式,仅能逼近二次曲线。 (2) 有理样条对于投影变换(透视观察变换)是不变的。这意味着我们可以对有理曲线上的控制点应用一个透视观察变换来得到曲线的正确视图。 非有理样条只对于仿射变换有不变性,而不具备投影变换不可变性。 通常,图形设计包用非均匀节点向量表达式来构造有理B样条,这种样条称为NURBs(Non-Uniform Rational B-spline)。 齐次坐标表达式用于有理样条,这是因为分母可以看成是在控制点四维表达式中的齐次因子。这样,一个有理样条可以看作四维非有理样条投影到三维空间中。
曲线设计结论: 曲线设计方法的关键在于基函数的选择,选择合适的基函数能够使系数矢量具有更明确的几何意义,绘图操作简单直观。 B样条曲线 参数多项式曲线 Bézier曲线 NURBS曲线 曲线设计方法的关键在于基函数的选择,选择合适的基函数能够使系数矢量具有更明确的几何意义,绘图操作简单直观。 基函数和参数化方法的选择对曲线的精度、光顺性、局部修改性具有决定性的影响。 整个曲线设计方法的改进方向是在提高精度、保证光顺性的同时追求灵活的操作、明确的几何意义和良好的局部修改性。
曲面的表示形式 或 映射 空间域 参数域 一般曲面可表示为: 曲面的矢量方程为: 其参数表达式为: 参数u、v的变化区间常取为单位正方形,即u,v∈[0,1]。x,y,z都是u和v二元可微函数。当(u,v)在区间[0,1]之间变化时,与其对应的点(x,y,z)就在空间形成一张曲面。 u 映射 空间域 参数域 v
rv ru r(u,v) v3 v Z v2 n r对 u和v的一阶偏导数为: v1 v0 u Y O X 一阶偏导数ru(u,v)和rv(u,v)继续对u,v求偏导数,得到四个二阶偏导数ruu、ruv、rvu、rvv:
直纹面 “线动成面” 双线性插值曲面 旋转面
曲线曲面的光滑连接 已知曲线r1(u)的末端和曲线r2(v)的首端相连,其不同阶次连续性的要求如下: 切矢方向与模: 方向相同,模不同,G1连续; 方向相同,模相同, C1连续; 曲线曲面的光滑连接 已知曲线r1(u)的末端和曲线r2(v)的首端相连,其不同阶次连续性的要求如下: 位置连续(C0 ):曲线段r1(u)的末端与曲线段r2(v)的首端达到位置连续的条件为:r1(1)=r2(0) 斜率连续 (C1):曲线段r1(u)的末端与曲线段r2(v)的首端达到斜率连续的条件为: 若k=1,说明曲线段r1(u1)的末端切矢与曲线段r2(u2)的首端切矢方向相同、模长相等,称为C1连续。若k≠1,则说明两段曲线在公共连接点处切矢方向相同,但模长不相等,这种情况是几何连续的,称为G1连续,也称视觉连续。 曲率连续 (C2): 两曲线段曲率连续应满足:(1)位置连续;(2)斜率连续;(3)曲率相等且主法线方向一致。 几何意义是:曲线段r2(u)首端的二阶导矢应处在由曲线段r1(v)末端的二阶导矢和一阶导矢所张成的平面内。 G2连续满足条件: C2连续满足条件: 对于曲面片,若两个曲面片在公共连接线上处处满足上述各类连续性条件,则两个曲面片之间有同样的结论。
一张定义在矩形域上的参数曲面可以表示为 可记为
切矢 法矢 边界线 角点 切矢 w=0 u[0,1] u=1 w[0,1] u
参数曲面的几个基本概念 1.曲面上的点:将给定的参数值 代入参数方程,可得曲面上的点 2.曲面上一点(u0,v0)的u和v切向量(切矢):
3.曲面上一点的法向量(法矢) 4.角点 5.边界线:
参数曲面 参数曲面通常表示成双参数u和v的矢函数 p = p(u,v) u1≤u≤u2,v1≤v≤v2
过曲面上每一点p(u0,v0),总有一条u曲线 p=p(u,v0)和v曲线p=p(u0,v)。
参数曲面 自由曲面的基本思想是由若干个较小的曲面按一定 连续性要求连接而成。 空间曲面的双参数表示: 当u为常数时,上式为曲面上的空间曲线,称为 u线。 经过曲面上某一点M(u,)处的切平面的法矢量为
Bézier曲面片 rij 给定空间16个位置点rij,可以确定一张三次Bezier曲面片。 首先生成四条v向的三次Bezier曲线: u 根据“线动成面”的思想,按设定间隔取 ,在四条v线上取点,沿u向生成三次Bezier曲线: u v 将u,v向曲线方程合并得:
Bézier曲面片的矩阵表达式 rij u v
C0连续的Bézier组合曲面(位置连续) 曲面片1 曲面片2 用Bézier曲面片组合曲面时,曲面拼合处位置连续,要求: r1(1,v)=r2(0,v) [1 1 1 1]AM1AT=[1 0 0 0]AM2AT u v rij u v 即: , 上图即为两张C0连续的Bézier曲面片.
C1连续的Bézier组合曲面(导矢连续) 曲面片2 曲面片1 若要得到跨界一阶导矢的连续性,对于0≤v≤1,曲面片1在u=1的切平面和曲面片2在u=0处的切平面重合,曲面的法矢在跨界处连续,即: 其中 λ(ν)是考虑法矢模长的不连续. 令 因为 组合曲面所有等v线的梯度连续用矩阵表示为: 取λ(ν)=λ, 表明跨界的四对棱边必须共线。
Bezier参数曲面 设pi,j (i=0,1,…,n;j=0,1,2,…m)为空间点列,则nm次Bezier曲面定义为: 注: pij rij 其中, pi,j 为Bezier曲面S(u,w)的控制顶点,Bi,n(u), Bj,m(w)为Bernstein基函数。 pi,j (i=0,1,…,n;j=0,1,2,…m)中相邻两点所形成的空间网格,称为特征网格。 * Bezier曲线由其特征多项式的顶点决定,而Bezier曲面由其特征多面体的顶点决定.
双线性Bezier曲面(m=n=1) 其中p00、p01、p10、p11 为四个顶点 双二次Bezier曲面(m=n=2)
双三次Bezier曲面(m=n=3) 其中P表示双三次Bezier曲面片的16个控制顶点
其中P表示双三次Bezier曲面片的16个控制 顶点。其中: p00 、 p03、 p30 、 p33 在曲面片的四个角点处. S(u,w)的四条边界线S(0,w), S(u,0), S(3,w), S(u,3),分别是以P00, P01, P02, P03,…, P03, P13, P23, P33,为控制多边形的 Bezier曲线。 矩阵中央的四个控制顶点p11、 p12、 p21 、 p22 与边界线无关,但也影响曲面形状。
PX0=[100,140,140,100, 180,190,190,180, 230,220,230,220, 210,270,270,250]; PY0=[100,170,220,290, 100,170,220,290, 100,170,220,290]; PZ0=[100,150,150,100, 180,210,210,180, 100,150,150,180]; count=4;
PX0=[100,140,140,100, 180,190,190,180, 230,220,230,220, 210,270,270,250]; PY0=[100,170,220,290, 100,170,220,290, 100,170,220,290]; PZ0=[100,150,150,100, 180,210,210,180, 100,150,150,180]; count=8;
PX0=[100,140,140,100, 180,190,190,180, 230,220,230,220, 210,270,270,250]; PY0=[100,170,220,290, 100,170,220,290, 100,170,220,290]; PZ0=[100,150,150,100, 180,210,210,180, 100,150,150,180]; count=40;
Bezier曲面 M=[-1,3,-3,1, 3,-6,3,0, count=32; -3,3,0,0, deltat=1/count; 1,0,0,0]; M1=M`; PX0=[100,140,140,100, 180,190,190,180, 230,220,230,220, 210,270,270,210]; PY0=[100,170,220,290, 100,170,220,290, 100,170,220,290]; PZ0=[100,150,150,100, 180,210,210,180, 100,150,150,100]; Bezier曲面 count=32; deltat=1/count; u=0.0; k=0.0 for i=1:count+1 w=0.0; for j=1:count+1 U=[u*u*u, u*u, u, 1]; W=[w*w*w, w*w, w, 1]'; SX(i,j)=(U*M)*PX0*(M1*W); SY(i,j)=(U*M)*PY0*(M1*W); SZ(i,j)=(U*M)*PZ0*(M1*W); w=w+deltat; end u=u+deltat; mesh(SX,SY,SZ);
z PX0= [100,140,140,100, 180,190,190,180, 230,220,230,220, 210,270,270,210]; PY0= [100,170,220,290, 100,170,220,290, 100,170,220,290]; PZ0= [100,150,150,100, 180,210,210,180, 100,150,150,100]; P33 P03 y P30 x P00
PX0= [100,140,140,100, 180,190,190,180, 230,220,230,220, 210,270,270,210]; PY0= [100,170,220,290, 100,170,220,290, 100,170,220,290]; PZ0= [100,150,150,100, 180,210,210,180, 100,150,150,-100]; P03 P30 P00 P33
PX0= [100,140,140,100, 180,190,190,180, 230,220,230,220, 210,270,270,210]; PY0= [100,170,220,290, 100,170,220,290, 100,170,220,290]; PZ0= [100,150,150,100, 180,210,210,180, 100,150,150,200];
PX0= [100,140,140,100, 180,190,190,180, 230,220,230,220, 210,270,270,210]; PY0= [100,170,220,290, 100,170,220,290, 100,170,220,290]; PZ0= [100,150,150,100, 180,210,210,180, 100,150,150,100];
犹他大学茶壶模型 茶壶数据由犹他大学M.Newell 创建,用来测试各种绘制算法,它由32个三次面片组成,用306个顶点描述,
Bezier曲面片的拼接 如图所示,设两张m×n次Bezier曲面片 分别由控制顶点 和 定义。
如果要求两曲面片达到 G0连续,则它们有公共的边界, 即: 于是有 为了构造合成曲面时有更大的灵活性,Bezier在1972年提出公式 这仅仅要求Qu (0,v) 位于Pu (1,v) 和Pv (1,v) 所在的同一个平面内,也就是曲 面片 边界上相应点处的切平面,这样就有了大得多的余地,但跨界切矢在 跨越曲面片的边界时就不再连续了。 同样,为了保证等式两边关于v的多项式次数相同, 须为任意正常数, β( v)是v的任意线性函数。
均匀B样条曲面 给定16个顶点dij(i=1,2,3,4 j=1,2,3,4)构成的特征网格,可以定义一张曲面片。 用di1、di2、di3、di4(i=1,2,3,4 )构建四条V向曲线C1、C2、C3和C4(图中虚线); d24 u v d42 d43 d44 d11 d12 d13 d14 d21 d23 d31 d32 d33 d34 C4 C3 C1 C2 d41 d22 参数v在[0,1] 之间取值vk ,对应于vk曲线C1、C2、C3和C4上可得到V1k、V2k、V3k和V4k四个点,该四点构成u向的一个特征多边形,定义一条新的曲线P(u,vk); u v C4 C3 C1 C2 V1k V3k V4k V2k 当参数vk在[0,1] 之间取不同值时,P(u,vk)沿箭头方向扫描,即得到由给定特征网格dij(i=1,2,3,4 j=1,2,3,4)定义的双三次均匀B样条曲面片P(u,v)。
双三次均匀B样条曲面P(u,v)的矩阵表示 d24 u v V1k d42 d43 d44 d11 d12 d13 d14 d21 d23 d31 d32 d33 d34 C4 C3 C1 C2 V2k V3k V4k d41 P(u,vK) d22
d24 u v d42 d43 d44 d11 d12 d13 d14 d21 d23 d31 d32 d33 d34 C4 C3 C1 C2 d41 d22
作业: 1、已知由P1(0,0,0),P2(2,2,-2), P3(2,-1,-1), P4(4,0,0) 和Q1(4,0,0), Q2(6,-2,), Q2(6,-2,1), Q3(8,-3,2), Q4(10,0,1),确定的两段三次Bezier曲线,试求其在P4(Q1),处达到C1连续的条件 2、下列有关Bezier曲线性质的叙述语句中,错误的结论为( ) A: Bezier曲线可用其特征折线集(多边形)来定义; B: Bezier曲线必须通过其特征折线集(多边形)的各个顶点; C: Bezier曲线两端点处的切线方向必须与起特征折线集(多边形)的相 应两端线段走向一致; D: 曲线位于特征多边形的顶点的凸包内。
3、以下正确的说法是: A:如果对B样条曲线的特征多边形P0P1P2P3,增加一个顶点P4,则特征多边形P1P2P3P4生成的三次B样条曲线与P0P1P2P3生成的三次B样条曲线在连接点P3的一阶导数连续,而二阶导数不连续; B:三次B样条曲线被相邻的5个顶点所控制; C:如果对B样条曲线的特征多边形P0P1P2P3,增加一个顶点P4,则特征多边形P1P2P3P4生成的三次B样条曲线与P0P1P2P3生成的三次B样条曲线在连接点P3的一阶导数和二阶导数都不连续; D:B样条曲线的形状与特征多边形各顶点的相对位置有关,而与坐标系的选择无关。 4、设有一三次Hermite曲线如下图所示,则错误的说法是: A: 改变曲线在端点P0或P1点的切线方向可以改变曲线的形状; B:曲线在端点P0的切线方向与P1的切线方向相反,大小相等; C: 曲线在端点P0的切线方向与P1的切线方向相反,大小不等; D: 改变曲线在端点P0或P1点的切线的大小可以改变曲线的形状。