版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章曲线和曲面,曲线和曲面可分为由已知方程式表示的规则曲线或曲面和用曲线或曲面拟合方法逼近的不规则曲线或曲面。这些不规则曲线或曲面一般采用分段的多项式参数方程来表示,由此形成一条光滑连续的曲线或曲面称为样条曲线或曲面。本章将主要讨论参数样条曲线和曲面的绘制方法。,5.1 曲线和曲面基础,从卫星的轨道、导弹的弹道,到汽车和飞机等的外形,直至日常生活中的图案和花样设计,都离不了对曲线的描述和绘制。以至于可以说,几乎没有一张设计图纸上是没有曲线的。,在我们遇到的各种各样的曲线中,归纳起来,大概不外乎两类:一类是我们已经比较熟悉的,如圆、椭圆、双曲线、正弦余弦、概率分布、摆线螺线等等。这类曲线均可以
2、用一个曲线方程式来表示,称此类曲线为规则曲线。比如圆的方程可以写成 x2y2 = R2等。,而另有一类曲线,我们尚不能确切给出描述整个曲线的方程,它们往往是由一些从实际中测量得到的一系列离散数据点用曲线拟合方法来逼近的,称为不规则曲线。这些曲线一般采用分段的多项式参数方程来表示,由此形成一条光滑连续的曲线称为样条曲线或简称样条。常见的参数样条曲线有抛物样条曲线、Hermite插值样条曲线、Bezier样条曲线和B样条曲线等。,当曲线的数学表达方法确定以后,剩下的问题就是如何把这些曲线绘制出来。要绘制一条指定的曲线函数的直接方法是用很多短直线段来逼近曲线。绘出的曲线的光滑度和精确度取决于我们所选
3、择的数据点的精度和数量。点的数量越多,直线段越短,则连成的曲线愈接近于理想曲线。,至于点的数量取多少,直线段取多长,则取决于我们对所绘制曲线的精度要求和图形输出设备的精度,但我们对所绘制曲线的精度要求不能逾越图形输出设备所实际具有的精度。,5.1.1 规则曲线和曲面的3种坐标表示法,一般平面曲线常用直角坐标、极坐标或参数方程表示,如工程上常用的渐开线、摆线以及正弦余弦曲线等,都是用这三种坐标表示的重要曲线。但从计算机图形学和计算几何的角度看,用参数方程绘制曲线比较方便。,实际上绘制任何平面曲线都要将曲线方程用参数方程形式表示,即得到曲线上点坐标x与y的分别计算式。于是计算出点的坐标值,调用画线
4、函数或画点函救绘出曲线上的所有点,便得到一条曲线。,1直角坐标曲线 曲线的直角坐标表示,有显式y = f(x) 和隐式f(x,y) = 0之分。如y = sin (x) 是显式表示,而x2 + y2 = 1是隐式表示。无论是哪种表示,都要将其转换成参数坐标表示即,x = x(t) y = y(t),然后可以开始绘制它的图形了。下面对曲线的直角坐标显式和隐式两种表示分别加以讨论。,(1)显式 对于显式表示y = f(x) 的曲线转换成参数坐标表示,这是非常容易的,即,x = x y = f(x),这里式子右边的x看成参数变量。此两式便是显式表示y = f(x) 曲线的参数坐标表示。,例如正弦曲线
5、y = sin(x) 是直角坐标显式表示其参数坐标表达式为 x = x y = sin(x),这时式子右边的x当作参数变量。这样给定一个参数变量x值,就可求得正弦曲线上一个点的坐标x与y值。进而一点一点地绘出正弦曲线。,(2)隐式 一般隐式f(x,y) = 0的曲线转换成参数坐标表示式是很困难的,如下面隐式曲线 4x43x3 + 2y2yx2(a + x)/(ax)= 0 (a0),要表示成参数坐标式,至今未能成功,因此无法使用计算机绘制它的图形。不过常用的重要曲线基本上都能用参数坐标表示。例如星形线直角坐标表示式: x2/3y2/3 = R2/3 (R正常数),可写成参数坐标表示式: x =
6、 Rcos3 y = Rsin3 (02) 从而可用计算机绘出其曲线图。,2极坐标曲线 对任一极坐标曲线=(),可利用极坐标与直角坐标变换关系式 x =cos y =sin,将此曲线转换成参数坐标表示为 x =()cos y =()sin 这里成为参数坐标。,例如,重要曲线阿基米德螺线 =a (a正常数),极坐标与直角坐标变换关系式 x =cos y =sin,将阿基米德螺线=a代入上面两式,便得 x =acos y =asin 这样就将阿基米德螺线极坐标表示转换成了参数坐标表示。,由阿基米德螺线参数坐标表示式 x =acos y =asin 可以计算出其曲线上点的坐标值,然后用这些点的坐标值
7、调用绘图函数就可绘出阿基米德螺线曲线图。,3参数坐标曲线 曲线的参数坐标表示一般为 x =x(t) y =y(t),如弹道曲线 x =V0tcos y =V0tsingt2/2 (0t2 V0Sin/g) 式中V0,g,均为常数,t为参数变量。,对于给定一个参数变量t值,就可求得弹道曲线上一个点的x与y坐标值。若给出参数变量t的一系列值,便可求出弹道曲线上一系列点的x和y坐标值。有了x,y坐标值,使用绘图函数把这一系列点绘制出来,就获得一条弹道曲线。,对于某一参数曲线,我们不可能也没有必要去研究参变量t从到+的整条曲线,而往往只对其中的某一段感兴趣。通常我们经过对参变量t的规格化变换,使t在0
8、,1闭区间内变化,写成t0,1,对此区间内的参数曲线进行研究。,4参数曲线的优点 在曲线的表示上,参数方程比显式、隐式方程有更多的优越性。,(1)有更大的自由度来控制曲线的形状。如一条二维三次曲线的显式表示为: y = ax3Bx2cxd 其中只有4个系数可用来控制此曲线的形状。,而二维三次曲线的参数表达式为: x = at3Bt2ctd y = et3ft2gth 其中有8个系数可用来控制此曲线的形状。,(2)对非参数方程表示的曲线进行变换,必须对曲线上的每个型值点进行几何变换;而对参数表示的曲线可对其参数方程直接进行几何变换(如平移、比例、旋转),从而节省计算工作量。,(3)便于处理斜率为
9、无限大的问题,不会因此而中断计算。,(4)规格化的参数变量t0,1,使其相应的几何分量是有界的,而不必用另外的参数去定义其边界。,(5)参数方程中,代数、几何相关和无关的变量是完全分离的,而且对变量个数不限,从而便于用户把低维空间中的曲线扩展到高维空间去。这种变量分离的特点使我们可以用数学公式去处理几何分量,如我们以后用的调和函数就具有此特点。,(6)易于用矢量和矩阵表示几何分量,简化了计算。基于这些优点,我们在以后将用参数表达式来讨论曲线问题。,5.1.2 参数样条曲线和曲面的常用术语,在工程设计中,一般多采用低次的参数样条曲线。这是因为高次参数样条曲线计算费时,其数学模型难于建立且性能不稳
10、定,即任何一点的几何信息的变化都有可能引起曲线形状复杂的变化。,因此,实际工作中常采用二次或三次参数样条曲线,如: 二次参数样条曲线: P (t) = A0 + A1t + A2t2 三次参数样条曲线: P (t) = A0 + A1t + A2t2 + A3t3,1型值点和控制点 所谓型值点,是指通过测量或计算得到的曲线上少量描述曲线几何形状的数据点。由于型值点的数量有限,不足以充分描述曲线的形状,因此通常是在求得一些型值点后,采用一定的数学方法,建立曲线的数学模型,从而再根据数学模型去获得曲线上每一点的几何信息。,所谓控制点,是指用来控制或调整曲线形状的特殊点,曲线段本身不通过该控制点。,
11、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点的曲率,如图5.1所示。曲率也是切线的方向角对于弧长的转动率,其值为曲线在M处的二阶导数。,图5.1 曲线的曲率,3插值、逼近和拟合,插值与逼近是曲线设计中的两种不同方法。插值设计方法要求建立的曲线数学模型,严格通过已知的每一个
12、型值点。而逼近设计方法,顾名思义,用这种方法建立的曲线数学模型只是近似地接近已知的型值点。,而曲线的拟合则是这两种设计方法的统称,是指在曲线的设计过程中,用插值或逼近方法使生成的曲线达到某些设计要求,如在允许的范围内贴近原始的型值点或控制点序列,或曲线看上去很光滑等。,4参数连续性和几何连续性,为保证分段参数曲线从一段到另一段平滑过渡,我们可以在连接点处要求各种参数连续性条件。,0阶参数连续性,记作C0连续,是指曲线相连,即第一个曲线段的终点与第二个曲线段的起点相同。一阶参数连续性,记作C1连续性,指代表两个相邻曲线段的方程在相交点处有相同的一阶导数(切线)。二阶参数连续性,记作C2连续性,是
13、指两个曲线段在交点处有相同的一阶和二阶导数。,连结两个相邻曲线段的另一个方法是指定几何连续性条件。这种情况下,只需两曲线段在相交处的参数导数成比例而不是相等。,0阶几何连续性,记为G0连续性,与0阶参数连续性相同,即两个曲线段必在公共点处有相同的坐标。一阶几何连续性,记为 G1连续性,指一阶导数在两个相邻段的交点处成比例但不一定相等。二阶几何连续性,记为G2连续性,指两个曲线段在相交处其一阶和二阶导数均成比例。G2连续性下,两个曲线段在交点处的曲率相等。,在实际的曲线造型应用中,我们要适当地选择曲线段间的连续性,使造型物体既能保证其光滑性的要求,也能保证其美观性的要求。,5.2 二次插值样条曲
14、线,5.2.1 二次插值样条曲线的数学表达式,在拟合生成样条曲线的众多方法中,我们首先选择较为简单的二次样条曲线即抛物样条曲线的生成方法作为基本方法,来讨论如何用插值方法生成通过给定离散型值点的样条曲线。实际上,二次Bezier曲线和二次B样条曲线也是抛物样条曲线,但它们采用的方法是逼近方法。,由于离散点的要求,我们首先要解决由给定点定义抛物线问题。设有不在同一直线上的三点:P1, P2, P3,现在要求通过该给定的三点定义一条抛物线。如图5.2所示。,图5.2 过三点的二次曲线,假如我们采用矢量表达式来表示参数化的二次曲线,那么可以把抛物线的表达式写成如下的一般形式为:,P(t)= A1 +
15、 A2t + A3t2 (0 t1) (5-1),抛物线是一条二次曲线,所以表达式中参数t的最高次数为2,同时让参数t在0l之间取值。,这就是说,只要确定了式(51)中的三个系数:A1,A2和A3,那么就确定了抛物线的表达式,随之抛物线的曲线图形也就可以确定。所以,我们的工作是要通过设定一些已知条件来求出这三个系数。,要确定这三个系数(目前尚为未知数),必须要有三个独立的条件。我们可以给定这三个独立条件为:,该抛物线过P1,P2,P3三个点,并且: 抛物线段以P1点为始点。即当参变量t = 0时,曲线过P1点;抛物线段以P3点为终点。即当参变量t = 1时,曲线过P3点;当参变量t = 0.5
16、时,曲线过P2点,且切矢量等于P3P1。,在这三个设定的条件下,构造的抛物线段如图5.3所示。,图5.3 过3点定义的二次曲线,图中的数据是这样的:A点为P1P3的中点,AP2 = P2Q,抛物线在P1点处与P1Q相切,在P3点处与QP3相切,曲线在P2点处的切矢P2与P1P3平行。,根据以上设定的条件,可以列出三个方程: t = 0:P(0)= A1 = P1 t = 1:P(1)= A1A2十A3 = P3 (5-2) t = 0.5;P(0.5)= A10.5A20.25A3 = P2,解以上三个联立方程: A1 = P1 P3 = A1 + A2 + A3 = P1A2 + A3 A2
17、 = P3P1A3 P2 = A1 + 0.5A2 + 0.25A3,亦即:4P2 = 4A1 + 2A2 + A3 = 4 P1 + 2(P3P1A3) + A3 = 2P1 + 2P3 A3 A3 = 2P1 + 2P3 4P2 以上式回代到 A2 = P3 P1 A3中,得: A2 = 4P2 P3 3P1,所以,通过解联立方程,得到的三个系数A1,A2,A3分别为: A1 = P1 A2 = 4P2P33P1 (5-3) A3 = 2P12P34P2,把求出的该三个系数的值,代入到抛物线的表达式(5-1)中,可得:,P(t)= A1 + A2t + A3t2 = P1 +(4P2 P3
18、 3P1)t + (2P12P3 4P2)t2 = (2t2 3t + 1)P1 +(4t 4t2)P2 + (2t2 t) P3 (5-4) (0t1),可把式(5-4)改写成矩阵形式为:,以上推导求出的算式,即为我们所要求的过不在一直线上的三点:P1(x1,y1),P2(x2,y2)和P3(x3,y3)的抛物线方程。这时根据参变量t的取值,我们就可以一一计算出位于曲线上的数据点,然后顺次连线绘出图形。,5.2.2 二次插值样条曲线的加权合成,设有一离散型值点列Pi(i = 1, 2, ,n),我们可以按式(5-5)每经过相邻三点作一段抛物线,由于有n个型值点,所以像这样的抛物线段一共可以作
19、出n2条。如图5.4所示。,图5.4 产生n2段抛物线,在这n2条抛物线段中,第i条抛物线段为经过Pi,Pi+1,Pi+2三点,所以它的表达式应为: Si(ti)=(2ti23ti+1)Pi+(4ti4ti2)Pi+1+(2ti2ti)Pi+2 (0ti1) (5-7),同理,第i+1条抛物线段为经Pi+1,Pi+2和Pi+3三点,所以它的表达式为: Si+1(ti+1)=(2ti+123ti+1+1)Pi+1+(4ti+14ti+12)Pi+2+(2ti+12ti+1)Pi+3 (0ti1) (5-8),经过四点所画出的两条抛物线段Si(ti)和Si+1(ti+1)的图形如图5.5所示:,图
20、5.5 Si和Si+1,一般说来,每两段曲线之间的搭接区间,两条抛物线是不可能重合的。例如图5.5中, Si和Si+1两条抛物线,它们在Pi+1和Pi+2两点之间为搭接区间,在这区间内,Si和si+1不太有可能会自然地重合成一条曲线。,显然,对于拟合曲线来说,整个型值点列必须只能用一条光滑的曲线连接起来。为了做到这一点,在Si和si+1这样两条曲线的共同区间内,必须有一个办法让它们按照一个一定的法则结合成一条曲线,这结合的办法就是加权合成。,在加权合成的过程中,我们首先要选择两个合适的权函数。如果我们在这里选择的两个权函数分别为f(T)和g(T),加权合成后的曲线为Pi+1(t),则: Pi+
21、1(t) = f(T)Si(ti)+ g(T)Si+1(ti+1),在抛物样条曲线中,我们选择的权函数f(T)和g(T)是简单的一次函数,且它们之间存在有互补性。它们分别为: f(T)= lT g(T) = T (OT1),这样,式: Pi+1(t) = f(T)Si(ti) g(T)Si+1(ti+1)即可改写为: Pi+1(t) =(1T)Si(ti) TSi+1(ti+1) (5-9),在表达式(5-9)中,包含了三个参变量,即:T、ti和ti+1。假如这三个参变量不加以统一,则接下去的工作是无法进行的,所以我们首先要统一式中的参变量。,对于曲线段Si(ti),参变量ti的取值范围为:0
22、ti1,但曲线段Si(ti)与曲线段Si+1(ti+1)搭接的部分是原曲线段的后半截,即是从点Pi+1到Pi+2之间的区间,在这个区间内,参变量的取值范围应为:0.5ti1。,同理,对于曲线段Si+1(ti+1),在点Pi+1到Pi+2之间的区间内,其参变量ti+1的取值范围应为:0ti0.5。 在权函数f(T)和g(T)中,变量T的取值范围定为:0T1。,为了统一式(5-9)中的三个参变量:T、ti和ti+1,我们选择t作为统一后的参变量,把原有的三个参变量T、ti和ti+1均化成唯一含有t的形式,并要给t规定一个合适的取值范围。假如我们使t的取值范围为:0t0.5,则上面的三个参变量可统一
23、形式为:,T = 2t ti = 0.5t 0t0.5 ti+1 = t,于是,原式(5-9)可根据新的参变量t改写成如下这样的形式: Pi+1(t) =(1 2t)Si(t + 0.5)2tSi+1(t) (5-10),其中: 12t = f(T) 2t = g(T) Si(t0.5)=(2t2t)Pi+(14t2)Pi+1+(2t2t)Pi+2 Si+1(t)=(2t23t1)Pi+1+(4t4t2)Pi+2+(2t2t)Pi+3,把以上四式代入式(5-10),展开、整理后可得: Pi+1(t) =(4t3 + 4t2 t)Pi+(13t310t2 +1)Pi+1 +(12t3 + 8t2
24、t)Pi+2+(4t3 2t2)Pi+3 (i = 1,2, n3) (0t0.5) (5-11),式(5-11)的实质是:表达了每相邻的四个点可以决定中间的一段抛物样条曲线。见图5.6所示。,图5.6 4个点决定中间的一段样条曲线,假如一个离散点列Pi具有n个型值点,即i=1,2,n。那么根据式(5-11),可以加权合成后生成n3段抛物样条曲线。即式(5-11)中的i的取值范围为:i1n3。,5.2.3 二次插值样条曲线的端点条件,上面已经说到,在全部点列Pi(i=1,2,n)中,我们只能得到n3段曲线。但n个型值点之间应有n1个区段。亦即,按照式(5-11)产生的曲线段不足以生成n1段曲线
25、,因其点列的首、尾两段曲线P1P2和Pn1Pn段,由于缺乏连续相邻的四点这样的条件而无法产生。,为了要产生首尾两段曲线,一个直接的想法就是在原点列的两端各加一个辅助点P0和Pn+1,如图5.8所示。,图5.8 两端加点,但是,余下的问题是这P0和Pn+1两点是如何加上去的,它必须依据什么原则,这就是所谓的“端点条件”。在这里,我们仅介绍常用的三种方法:,已知两端的切矢P1和Pn 在前面我们已经说过,在由P1、P2、P3三点所确定的抛物线中,过P2点曲线的切矢 P 2 = P3P1,即:P1 = P3P 2 这样,在抛物样条曲线中,当条件给出了两端的切矢P1和Pn之后,根据上面的原理可得: P1
26、 = P2P0 P0 = P2P1 Pn = Pn+1Pn1 Pn+1 = Pn1+ Pn 即可以确定辅助点P0 和Pn+1的坐标位置。,这种端点的情况,一般适用于所求的曲线要和已经存在的曲线或直线相连接。,自由端条件 另一种补点的方法的原理比较简单,它让所补之点P0 和Pn+1与原两端点P1 和Pn分别重合,即: P0 = P1 Pn+1 = Pn,这样的补点方法称为自由端条件,这种方法一般适用于对曲线的两端没有什么特殊的要求。,形成封闭曲线 为了在n个型值点之间形成封闭曲线,那末就要生成n段曲线段,而不是原来的n1段。所以在补点工作中要加三个点,首先让首尾两点重合,然后各向前后延长一点,即
27、: Pn+1 = P1 P0 = Pn Pn+2 = P2,上述由加权合成推导的抛物样条曲线是由若干个曲线段组成的,每两个相邻的型值点之间形成一段曲线,每相邻的两段曲线在型值点处相接,并且一阶导数相等,因此抛物样条曲线达到C1连续。,5.2.4 二次插值样条曲线的性质,抛物样条曲线的算法程序如下: void parspl(int p2,int n,int k,int e) /P为型值点的坐标数组,n为型值点数,k为插值数,即 是把参变量t区间细分的份数。 int x,y,i,j,m=n; float t1,t2,t3,t,a,b,c,d;,if(e=1)/自由端 p00 = p10;p01 =
28、 p11; pn+10 = pn0;pn+11 = pn1; else /画封闭曲线 p00 = pn0;p01 = pn1; pm0 = p10;pm1 = p11; pm+10 = p20;pm+11 = p21; t0.5k; Moveto(p10, p11);,for(i=0;im1;i+) for(j1;jk;j+) t1j*t;t2t1*t1;t3t2*t1; a4.0*t2t14.0*t3; b1.010.0*t212.0*t3; ct1+8.0*t212.0*t3; d4.0*t32.0*t2; xa*pi0+b*pi+10+c*pi+20+d*pi+30; ya*pi1+b*
29、pi+11+c*pi+21+d*pi+31; lineto(x, y); lineto(pi+20, pi+21); ,5.3 三次插值样条曲线,插值样条曲线大多用来建立物体运动路径或提供实体表示方法,有时也可用来设计物体形状。三次插值样条曲线在灵活性和计算速度之间提供了一个合理的折中方案。与更高次样条相比,三次插值样条只需较少的计算和存储,且较稳定。与低次插值样条相比,三次插值样条在模拟任意形状时显得更灵活。,三次插值样条曲线由分段的三次多项式来描述。假如我们设其参变量为t,则分段三次插值样条曲线表达式的一般形式可以写成:,P(t)= B1B2tB3t2十B4t3 (0ttm) (5-13)
30、 其中的P(ti)=x(ti) y(ti) z(ti),可以看作是插值样条曲线上某一点的位置向量,ti是该点相应的参变量,它的三个分量:x(ti),y(ti),z(ti)可以看作是点的坐标值。,式(5-13)中的四个系数B1, B2, B3和B4是待定的,即是说方程中有四个未知数。为了把式(5-13)具体化,必须确定这四个系数,显然,这需要设定四个独立的条件。,n+1个控制点共产生n段曲线,每段曲线都有4个系数需要确定。不同的系数确定方法就导致不同的三次插值样条曲线。,5.3.1 三次自然样条曲线,最先用于图形应用的三次插值样条曲线是三次自然样条曲线。这个插值样条曲线是原始绘图样条的一个数学表
31、达式。用公式表示一个三次自然样条曲线时,需要两个相邻曲线段在公共边界处有相同的一阶和二阶导数,即三次自然样条曲线具有C2连续性。,对于三次自然样条曲线,n+1个型值点插值产生n段曲线,这样共有4n个多项式系数需要确定。对于每一个内型值点(共有n-1个),有四个边界条件:在该型值点两侧的两个曲线段在该点处有相同的一阶和二阶导数,且两个曲线段都要通过该点。,这给出了由4n个多项式系数组成的4n-4个方程,另外再给出一个从第一个型值点p0(即曲线起点)所得的方程,和从最后一个型值点pn(即曲线终点)所得的方程。我们还需要二个条件才能解出所有系数值。获取这二个额外方程的方法之一是在p0和pn处设二阶导
32、数为0。另一个方法是增加二个“隐含”型值点,各自位于型值点序列的两端,即增加p-1和pn+1两个型值点。这时,所有的原有型值点都成了内点,具有所需的4n个边界条件。,尽管三次自然样条曲线是一条三次插值样条曲线,能够做到曲线通过所有型值点,但它有一个主要缺点,即必须解n次方程组,整个曲线受所有型值点控制,不允许“局部控制”,因此不给出完整的新型值点集,不可能去构造曲线的一部分。所以,在实际应用中很少采用三次自然样条曲线。,5.3.2 Hermite样条曲线,Hermite样条曲线是以法国数学家Charles Hermite命名的,是一个分段三次多项式并在每个型值点有给定的切线。与三次自然样条曲线
33、不同,Hermite样条曲线可以局部调整,因为每个曲线段仅依赖于端点约束。,整个曲线通过所有的型值点,而对于每个曲线段来说,它通过两个相邻的型值点。我们把这两个点作为该段曲线的起点和终点,设为P0点和P1点。并且假定曲线段在两端点处的切矢为已知,分别设为 P0和 P1。曲线的参变量t是在两个端点取值0和1之间变化,如图5.11所示。,图5.11 设定端点条件,在这样的前提下,对于每一个三次曲线段,就有了四个独立条件,它们是:两个端点的位置向量及曲线在两端点处的切矢。于是,根据这四个条件,就可以求出分段表达式(5-13)中的四个系数。,P0 = B1B2tB3t2十B4t3 = B1 (当t=0
34、) P1 = B1B2tB3t2十B4t3 = B1 + B2 + B3 + B4 (当t=1) P0 = B22B3t十3B4t2 = B2 (当t=0) (5-14) P1 = B22B3t十3B4t2 = B2 + 2B3 + 3B4 (当t=1),上述公式(5-14)可写成如下矩阵形式:,该方程对多项式系数求解,可得Hermite样条曲线的矩阵表达式:,最后可以将上式展开,得到Hermite混合函数的表达式: P(t)=Pk(2t3-3t2+1)+Pk+1(-2t3+3t2)+Pk(t3-2t2+t)+Pk+1(t3-t2) (5-17),Hermite多项式对某些数字化应用有用,这里
35、它不太困难就可以得出或估算出曲线的斜率。但对计算机图形学中的大部分问题而言,除了型值点坐标外,更好的做法是不需要输入曲线斜率值或其他几何信息就能生成样条曲线。因此,就出现了Cardinal样条这种基于Hermite样条的变化形式,它不需要输入控制点上的曲线导数值,而是采用控制点的坐标位置来计算导数。,5.3.3 Cardinal样条曲线,像Hermite样条曲线一样,Cardinal样条曲线也是分段三次插值曲线,且每曲线段终点处均指定切线。与Hermite样条的区别是,不一定要给出终点的切线值。在Cardinal样条曲线中,一个控制点处斜率值可由两个相邻控制点坐标来计算。,一个Cardinal
36、样条曲线完全由四个连续控制点给出。中间两个控制点是曲线段端点,另二个点用来计算终点斜率。如图5.12所示,设P(t)是两控制点Pk和Pk+1间的参数三次函数式,则从Pk-1到Pk+2间的四个控制点用于建立Cardinal样条曲线段的边界条件:,图5.12 两控制点Pk和Pk+1间的参数三次函数式P(t),P0 = Pk P1 = Pk+1 P0 =1/2(1-ts)(Pk+1- Pk-1) (5-18) P1 = 1/2(1-ts)(Pk+2- Pk),则控制点Pk和Pk+1处的斜率分别与弦Pk-1Pk+1和PkPk+2成正比(图5.13)。参数ts称为张力(tension)参数,因为ts控制
37、Cardinal样条曲线与输入控制点间的松紧程度。,图5.13 控制点Pk和Pk+1处的斜率分别与弦Pk-1Pk+1和Pk Pk+2成正比,图5.14说明了张力ts取很小和很大值时Cardinal曲线的形状。当ts=0时,这类曲线称为Catmull-Rom样条曲线或Overhauser样条曲线。,ts0(较紧曲线) 图5.14 张力参数ts在Cardinal曲线形状中的作用,用类似Hermite样条曲线中的方法,我们可以将边界条件(5-17)转换成矩阵形式:,这里s=(1-ts)/2。,将矩阵方程(5-17)展开成多项式形式,有: P(t)=Pk-1(-st3+2st2-st)+Pk(2-s)
38、t3+(s-3)t2+1+ Pk+1(s-2)t3+(3-2s)t2+st+Pk+2(st3-st2) (5-20),以下是Cardinal样条曲线的VC程序:,void CardinalSpLine(CPoint *pp, int n,float tension) /这里数组pp的下标从1开始 int x,y,i,j,k=1000; double t,t1,t2,t3,a,b,c,d,s; t=1.0/k;s=(1.0-tension)/2.0; pp0.x=2*pp1.x-pp2.x; /端点处理 pp0.y=2*pp1.y-pp2.y; ppn.x=2*ppn-1.x-ppn-2.x;
39、ppn.y=2*ppn-1.y-ppn-2.y; MoveTo(pp1); for(i=1;in-1;i+) for(j=1;j=k;j+) ,t1=j*t; t2=t1*t1; t3=t2*t1; a=-s*t3+2*s*t2-s*t1; b=(2-s)*t3+(s-3)*t2+1; c=(s-2)*t3+(3-2*s)*t2+s*t1; d=s*t3-s*t2; x=int(a*ppi-1.x+b*ppi.x+c*ppi+1.x+d*ppi+2.x); y=int(a*ppi-1.y+b*ppi.y+c*ppi+1.y+d*ppi+2.y); LineTo(x,y); ,5.4 贝济埃曲线
40、,在上面讨论的抛物样条曲线和三次插值样条曲线中,它们的共同特点是:最终生成的曲线通过所有给出的型值点,我们称之为“点点通过”。通过以上的讨论,我们可以看到,这两种曲线的计算和编程都比较简单易行,并且分别使曲线达到了一阶和二阶连续这已经可以满足一般的工程应用问题了,所以应用较广。,但在外形设计中,比如船舶和汽车的外形设计,初始给出的型值点往往并不精确,并且有些地方完全仅仅是为了外观上的考虑。在这样的一种应用前提下,去一点一点地插值计算并使曲线点点通过不很合算。,另外,在外形设计中,最好能使设计的结果灵活直观地反映出来,比如局部修改型值点也能在外形上得到直观的反映,以便于设计者进行交互式设计操作。
41、这些,前面所介绍的两种插值样条曲线都是不够的。,为了改善这种情况,法国Bezier(贝济埃)提出了一种新的参数曲线逼近方法,称作贝济埃曲线。后来Gordon, Riesenfeld和Forrest等人对Bezier曲线进行了修改和发展,提出了B样条曲线。这两种曲线都因能较好地适用于外形设计的特殊要求而获得了广泛的应用。,贝济埃曲线的形状是通过一组多边折线(也称为贝济埃多边形或特征多边形)的各项唯一地定义出来的。,在该多边折线的各顶点中,只有第一点和最后一点是在曲线上的,其余的顶点则用来定义曲线的导数、阶次和形状。第一条边和最后一条边则表示出了曲线在起点处和终点处的切线方向,即第一条边和最后一条
42、边分别和曲线在起点和终点处相切。曲线的形状趋向于多边折线的形状。改变多边折线的顶点位置和曲线形状的变化有着直观的联系。图5.15列举了一些贝济埃多边折线和相应的贝济埃曲线的形状关系。,图5.15 贝济埃曲线,5.4.1 贝济埃曲线的数学表达式,贝济埃曲线是由多项式调和函数推导出来的,通常n1个顶点定义一个n次多项式,其参数向量表达式为;,在式(5-21)中,Pi为各顶点的位置向量,Bi,n(t)为伯恩斯坦(Bernstein)基函数,也就是贝济埃多边形的各顶点位置向量之间的调和函数。该函数的表达式为:,如果我们规定:00和0!均为1,那么,当t=0时: P (0) = P0 B0, n (0)
43、 + P1 B1, n (0)+ P2 B2, n (0) + Pn Bn, n (0),在t=0时除第一项外其余各项均为0,所以,当t =1时: P (1) = P0 B0, n (1) + P1 B1, n (1)+ P2 B2, n (1) + Pn Bn, n (1),在t=1时除最后一项外其余各项均为0,所以,从以上结果可以得出,曲线通过多边折线的起点和终点。 下面,我们通过对基函数求导,来分析一下曲线在两端点处的切矢情况。,在起始点,t =0,公式(5-23)中只有i=0,1两项有效,即:,= n(P1一P0),在终止点,t=1,公式(5-23)中只有i=n-1,n两项有效,同理可
44、得: P(1)= n(Pn-Pn1),这说明:贝济埃曲线在两端点处的切矢方向是与贝济埃多边折线的第一条边和最后一条边相一致的。,我们已经知道,确定m个顶点,可以定义一条m1次的贝济埃曲线。下面,我们来讨论一下较低次的贝济埃曲线,例如二次贝济埃曲线和三次贝济埃曲线。,5.4.2 二次贝济埃曲线,当m = 3时,顶点 P0,P1,P2可定义一条二次(n=2)贝济埃曲线。此时式(5-21)可以改写成: P(t)= (1t)2P02t(1t)P1t2P2 (0t1) (5-24),写成矩阵形式为:,P(t) = t2 t 1,在式(5-24)中,相对应于式(5-21)中的调和函数Bi,n(t)分别为:
45、 B0,2(t)= 12tt2 B1,2(t)= 2tt2 B2,2(t)= t2,根据式(5-23),当n = 2时,二次贝济埃曲线在起点P0处有切向量P0=P(t=0)=2(P1P0);在终点P2处有切向量P2 =P(t=1) = 2(P2P1)。同时,当t =1/2时:,该式说明,二次贝济埃曲线经过P0P1P2中的一条中线P1Pm的中点P。综上所述,我们可以看出:二次贝济埃曲线是一条抛物线。见图5.16所示。,图5.16 二次贝济埃曲线,5.4.3 三次贝济埃曲线,当m=4时,顶点P0, P1, P2, P3四点可定义一条三次(n=3)贝济埃曲线。此时式(5-21)可以改写为: P(t)
46、= (1t)3P0+3t(1t)2P1+3t2(1t)P2+t3P3 = (13t+3t2-t)3P0+(3t6t2+3t3)P1+(3t23t3)P2 + t3P3 (0t1) (5-25),同样,该式可改写成矩阵表达式为:,P(t) = t3 t2 t 1,在式(5-25)中,相对应于式(5-21)中的调和函数Bi,n(t)分别为: B0,3(t)= 13t3t2t3 B1,3(t)= 3t 6t23t3 B2,3(t)= 3t23t3 B3,3(t)= t3,三次贝济埃曲线是二阶连续的。 P(t)= 3(1t)2P0+(312t+9t2)P1+(6t9t2)P2+3t2P3 P”(t)=
47、 6(1t)P0+(12+18t)P1+(618t)P2+6tP3 P”i(1)=6(11)P0+(12+18)P1+(618)P2+6 P3=6(P1+P3-2P2) P”i+1(0)= 610)P1+(-12+0)P2+(60)P3+0P4=6(P1+P3-2P2) P”i(1)= P”i+1(0),对于更高次的贝济埃曲线,在此不再一一列举并讨论。,5.4.5 贝济埃曲线生成算法,根据式(5-21),可以编写出绘制任意阶次的贝济埃曲线的绘图程序。 double powi(double v,int k) / 计算vk double temp=1.0; if(k=0 | v=0)return
48、1; / 00=1 else for(int i=1;i=k;i+) temp=temp*v; return temp; ,long fac(int m) /计算m! int i; long temp=1; if(m=0)return 1; / 0!=1 else for(i=2;i=m;i+) temp=temp*i; return temp; ,void bezier(int px,int py,int n) int x,y,i,j,k=100; double t,t1,u,v; double temp,temp1,temp2,bi; t=1.0/k; moveto(px0,py0); f
49、or(j=1;jk;j+) t1=j*t; u=t1;v=1u; x=0;y=0;,for(i=0;i=n;i+) temp=double(fac(n)/fac(i)/fac(ni); temp1=powi(u,i); temp2=powi(v,ni); bi=temp*temp1*temp2; x=x+bi*pxi; y=y+bi*pyi; LineTo(x,y); lineto(pxn,pyn); ,5.5 B样条曲线,上面所介绍的贝济埃曲线,在外形设计的应用中,存在有一些具体的不足之处: 确定了多边形的顶点数(m个),也就决定了所定义的贝济埃曲线的阶次(m1次),这样很不灵活。,当顶点数
50、(m)较大时,曲线的阶次将比较高。此时,多边形对曲线形状的控制将明显减弱。,从式(521)可以看出,调和函数的值在开区间(0, 1)内均不为零。因此,所定义的曲线在(0t1)的区间内的任何一点均要受到全部顶点的影响。即改变其中任一个顶点的位置,将会对整条曲线产生影响,因而对曲线进行局部修改将成为不可能。,5.5.1 B样条曲线的数学表达式,为了克服以上提到的在贝济埃曲线中存在的一些问题,Gordon,Riesenfeld和Forrest等人拓展了贝济埃曲线,用n次B样条基函数替换了伯恩斯坦基函数,构造了B样条曲线。B样条曲线除了保持了原贝济埃曲线所具有的优点外,还增加了可以对曲线进行局部修改这
51、一突出的优点。除此之外,它还具有对特征多边形更逼近,多项式阶次较低等优点。因此,B样条曲线在外形设计中得到了广泛的重视和应用。,通常,给定m+n+1个顶点Pi (i =0, l, 2, , m+n),可以定义m+1段n次的参数曲线为:,式中:Pk,n(t)为第k段n次B样条曲线段(k=0,1,m),Fi,n(t)为n次B样条基函数,也称为B样条分段混合函数。其形式为:,(5-27),连接全部曲线段所组成的整条曲线称为n次B样条曲线。依次用线段连接Pi+k(k=0, 1, ,n)所组成的多边折线称为B样条曲线在第i段的B特征多边形。,n次B样条曲线可达到n1阶连续。,由式(526)可以看出,B样
52、条曲线是分段组成的。所以特征多边形的顶点对曲线的控制灵活直观。由于整条B样条曲线能达到n1阶的连续,而在工程实际应用中,二阶连续的曲线已能使工程问题的解决相当满意,所以在实际应用中,三次B样条曲线和二次B样条曲线应用得较为广泛。高于三次的B样条曲线,由于计算过于复杂,且也不一定适合于一般的工程应用,所以用得很少。,5.5.2 二次B样条曲线,对于二次B样条曲线,n=2,i=0, l, 2。所以式(5-27)可以写成如下形式:,因此,二次B样条曲线的分段表达式可以写成如下的形式: Pi(t)= F0,2(t)Pi + F1,2(t)Pi+1十F2,2(t)Pi+2 (i= O,1,2,m),(5
53、-28),综合起来,二次B样条曲线还可以写成更一般化的形式:,式中, Pk为分段曲线的B特征多边形的顶点:P0,P1,P2。第j段曲线的Pk即为:Pi,Pi+1,Pi+2连续的三个顶点。,(5-29),对P(t)求导可得:,(5-30),从式(528),我们可以总结出二次B样条曲线在端点处的性质;,由以上的三对式子说明:二次B样条曲线段的起点P(0)在B特征多边形第一条边的中点处,且其切向量B1B0即为第一条边的走向;终点P(1)在B持征多边形线第二条边的中点处,且其切向量B2B1即为第二条边的走向。而且,P( )正是P(0)B1P(1)的中线B1M 的中点,且在P( )处的 切线平行于 。因
54、此, 分段二次B样条曲线是一条 抛物线。见图5.17所示。,图5.17 二次B样条曲线,可见,由n个顶点定义的二次B样条曲线,实质上是n2段抛物线(相邻三点定义)的连接,并在连接处达到一阶连续。,5.5.3 三次B样条曲线,对于三次B样条曲线,n=3,k=0,1,2,3。所以式(5-27)可以分别写成如下形式:,= (t3 + 3t2 3t + 1),= (3t3 6t2 + 4),= (3t3 + 3t2 + 3t + 1),= t3,所以,三次B样条曲线的表达式可以写成:,(5-31),关于式(5-31)的含义,可以参见对式(5-29)的说明,在此不再赘述。 下面,我们来讨论一下三次B样条
55、曲线的端点性质。 由式(5-31)可以进一步推导得:,P(t)= (1t)3 P0+ (3t3 6t2 + 4) P1+ (-3t3 + 3t2 +3t + 1) P2+ t3P3 P (t)= -3(1t)2 P0+ (9t2 12t ) P1+ (-9t2 + 6t+3) P2+ 3t2P3 P”(t)= 6(1t) P0+ (18t 12 ) P1+ (-18t + 6) P2+ 6tP3, 以t的端点值代入,得:,从以上列出的端点结果我们可以看到,曲线段的起点P(0)位于P0P1P2底边P0P2的中线P1Pm上,且距P1点的三分之一处。该点处的切矢P(0)平行于P0P1P2的底边P0P
56、2,且长度为其二分之一。 该点的二阶导数P(0)等 于中线矢量P1Pm的二倍, 见图5.18。,图5.18 三次B样条曲线段,同理,对于终点P(1)处的情形与此相应。如果在B特征多边形上增加了一个顶点P4,那么P1P2P3P4又可定义一段新的三次B样条曲线。因为新曲线段起点的有关数据和上一段曲线的终点的有关数据都只和P1、P2、P3三点有关,所以该二段曲线在连接处的位置矢量,一阶切矢和二阶切矢都应相等,即: P1(1) = P2(0) P1(1) = P2(0) 这就证明了,三次B样条曲线可以达到二阶连续。,5.5.6 三次B样条曲线的算法源程序,以下是三次B样条曲线的VC源程序: void
57、BSpLine(CPoint *pp, int n) /这里数组pp的下标从1开始 int x,y,i,j,k=1000; double t,t1,t2,t3,a,b,c,d; t=1.0/k; pp0.x=2*pp1.x-pp2.x; /端点处理 pp0.y=2*pp1.y-pp2.y; ppn.x=2*ppn-1.x-ppn-2.x; ppn.y=2*ppn-1.y-ppn-2.y; MoveTo(pp1);,for(i=1;in-1;i+) for(j=1;j=k;j+) t1=j*t; t2=t1*t1;t3=t2*t1; a=(3*t2-t3-3*t1+1)/6; b=(3*t3-6
58、*t2+4)/6; c=(3*t2-3*t3+3*t1+1)/6; d=t3/6; x=int(a*ppi-1.x+b*ppi.x+c*ppi+1.x+d*ppi+2.x); y=int(a*ppi-1.y+b*ppi.y+c*ppi+1.y+d*ppi+2.y); LineTo(x,y); ,5.6 有理样条曲线,有理函数是两个多项式之比。因此,有理样条(rational spline)是两个样条函数之比。例如,有理B样条曲线可以用向量描述为:,(5-32),其中,Pk是n+1个控制点位置,参数k是控制点的权因子。一个特定的k值越大,曲线越靠近该控制点Pk。当所有权因子都设为1时,得标准B样条曲线,因为这时方程(5-32)中的分母为1(混和函数之和)。,有理样条与非有理样条相比有两个重要的优点。第一,提供了二次曲线的精确表达式,如圆和椭圆。非有理样条,表达式为多项式,仅
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 10.现代建筑教学设计初中美术浙教版九年级下册-浙教版
- 5.5 点击新材料教学设计初中物理沪粤版八年级上册-沪粤版2012
- 1.3 直角三角形全等的判定教学设计初中数学湘教版2012八年级下册-湘教版2012
- 2025-2026学年比轻重中班教案
- 5.3 算法的三种基本逻辑结构和框图表示法教学设计中职基础课-职业模块 服务类-语文版-(数学)-51
- 事业单位合并审计制度
- 人大教育培训工作制度
- 企业技术培训教育制度
- 优化审计人才管理制度
- 供应室感控培训教育制度
- 2026年安徽新闻出版职业技术学院单招职业技能考试题库含答案详解
- 第一单元连接世界的丝绸之路2丝路视觉笔记++课件+2025-2026学年人美版初中美术八年级下册
- 《林海雪原》主要情节与重要事件(速记清单)解析版-2025-2026学年六年级语文下册整本书阅读(统编版五四学制)
- 2026-2028年中国冰棍行业生态全景与战略纵深研究报告:政策、技术、资本与消费四重驱动下的产业重构与机遇地图
- 国家职业资格认证考试报名试题及答案
- 公司级安全教育培训考试卷测试题(答案)
- (正式版)DB51∕T 2732-2025 《用材林培育技术规程 杉木》
- 《西游记知识竞赛》题库及答案(单选题100道)
- DB34∕T 5225-2025 风景名胜区拟建项目对景观及生态影响评价技术规范
- 2026年苏州工业职业技术学院单招职业技能测试必刷测试卷附答案
- 2025年陕西省中考化学试题答案解读及备考指导课件
评论
0/150
提交评论