- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2016/3/6 计算机图形学演示稿 纪玉波制作 (C) 2
4.1.2 插值、逼近和拟合 给出一组有序的型值点列,根据应用的要求来得 到一条光滑曲线,通常采用两种不同的方法,即插 值方法和逼近方法。 插值方法要求生成的曲线通过每个给定的型值点。 曲线插值方法有多项式插值,分段多项式插值,样 条函数插值等。 逼近方法要求生成的曲线靠近每个型值点,但不 一定要求通过每个点。逼近方法有最小二乘法, Bezier方法,B样条方法等。 用插值或逼近来构造曲线的方法通称为曲线拟合 方法。
2016/3/6
计算机图形学演示稿 纪玉波制作 (C)
12
将上式展开写成代数形式为: P(u)﹦Pk(2u3﹣3u2﹢1)﹢Pk+1(-2u3﹢3u2) +Dk(u3﹣2u2﹢u)﹢Dk+1(u3﹣u2) ﹦PkH0(u)﹢Pk+1H1(u)﹢DkH2(u)﹢Dk+1H3(u)
其中 H0(u)﹦2u3﹣3u2﹢1 H1(u)﹦-2u3﹢3u2 H2(u)﹦u3﹣2u2﹢u H3(u)﹦u3﹣u2 称为Hermite样条调和函数,因为它们调和了边界约束值, 使在整个参数范围内产生曲线的坐标值。调和函数仅与 参数u有关,而与初始条件无关,且调和函数对于空间的 三个坐标分量(x,y,z)是相同的。
1
4.1 曲线曲面的参数表示及连续性 4.1.1曲线曲面的参数表示
如果用u表示参数,二维空间自由曲线的参数方程可以记为: x﹦x(u),y﹦y(u) u[0,1] 二维空间曲线上一点的参数表示为: P(u)﹦[x(u),y(u)] 三维空间自由曲线的参数方程表示为: x﹦x(u),y﹦y(u),z﹦z(u);u[0,1] 曲线上一点的参数表示为: P(u)﹦[x(u),y(u),z(u)] 同样,如果用u,w 表示参数,二维空间自由曲面的参数方程 表示为: x﹦x(u,w),y﹦y(u,w) u,w[0,1] 曲面上一点的参数表示为: P(u,w)﹦[x(u,w),y(u,w)] 三维空间自由曲面的参数方程表示为: x﹦x(u,w),y﹦y(u,w),z﹦z(u,w);u,w[0,1] 曲面上一点的参数表示为: P(u,w)﹦[x(u,w),y(u,w),z(u,w)]。
2016/3/6 计算机图形学演示稿 纪玉波制作 (C) 13
下图表示出Hermite样条曲线的调和函数随参数u变化的曲线
2016/3/6
计算机图形学演示稿 纪玉波制作 (C)
14
还可将方程整理成如下形式: P(u)﹦(2Pk-2Pk+1+Dk﹢Dk+1)u3 ﹢(-3Pk﹢3Pk+1-2Dk-Dk+1)u2+Dku﹢Pk 写成坐标分量形式则如下式: x(u)﹦(2xk-2xk+1+xk'﹢xk+1')u3 ﹢(-3xk﹢3xk+1-2xk'-xk+1')u2+xk'u﹢xk
2016/3/6 计算机图形学演示稿 纪玉波制作 (C) 5
例如空间一条曲线用三次参数方程可以表示如下: x(u)﹦axu 3﹢bxu 2﹢cxu﹢dx y(u)﹦ayu 3﹢byu 2﹢cyu﹢dy z(u)﹦azu 3﹢bzu 2﹢czu﹢dz u[0,1] 或 P(u)﹦au 3﹢bu 2﹢cu﹢d u[0,1] 如果曲线的边界条件设定为端点处满足给定坐标值 P(0)和P(1),同时端点处的导数也满足给定值P’(0) 和P’(1)。这四个边界条件对决定上式中方程的系数 是充分条件。例如已知x(0)、x(1)、x’(0)和x’(1), 则ax、bx、cx和dx就可以求出。解出各个系数后的上) 式就是一种确定的三次参数样条表示式。
例:给定9个型值点,其中起始点和终止点是同一个点, 从而其特征多边形是一个首尾相接的封闭多边形,具 体坐标位置如下:
(100,300),(120,200),(220,200),(270,100), (370,100),(420,200),(420,300),(220,280), (100,300) 假定各点处的一阶导数数值如下: (70,-70), (70,-70), (70,-70),(70,-70), (70,70), (70,70), (-70,70),(-70,70),
计算机图形学演示稿 纪玉波制作 (C)
20
4.2.2 Cardinal 样条曲线 象Hermite样条曲线一样,Cardinal样条曲线也是 插值分段三次曲线,且边界条件也是限定每段曲线端 点处的一阶导数。与 Hermite 样条曲线的区别是,在 Cardinal样条曲线中端点处的一阶导数值是由两个相 邻型值点坐标来计算的。 设相邻的四个型值点分别记为 Pk-1 、 Pk 、 Pk+1 、 Pk+2, Cardinal 样条插值方法规定 Pk 、 Pk+1 两型值点 间插值多项式的边界条件为: P(0) ﹦Pk P(1) ﹦Pk+1 P’(0)﹦(1﹣t)(Pk+1﹣Pk-1)/2 P’(1)﹦(1﹣t)(Pk+2﹣Pk)/2 其中t为一可调参数,称为张力参数,可以控制 Cardinal样条曲线型值点间的松紧程度。
由边界条件构成的4个方程联立: Pk ﹦d Pk+1﹦a﹢b﹢c﹢d Dk ﹦c Dk+1﹦3a﹢2b﹢c 写成矩阵的形式为:
2016/3/6
计算机图形学演示稿 纪玉波制作 (C)
10
解此方程得:
2016/3/6
计算机图形学演示稿 纪玉波制作 (C)
11
称为Hermite矩阵,插值样条参数方程可以写成
17
MoveToEx(hdc,arry1[n][0],arry1[n][1],NULL); a0 = k1; a1 = k3; a2 = -3*k1+3*k2-2*k3-k4; a3 = 2*k1-2*k2+k3+k4; b0 = m1; b1 = m3; b2 = -3*m1+3*m2-2*m3-m4; b3 = 2*m1-2*m2+m3+m4; dt = 1.0/steps;
(70,-70)
用Hermite插值方法绘制曲线。
2016/3/6 计算机图形学演示稿 纪玉波制作 (C) 16
Hermit三次曲线算法主要实现子程序实例
void HermitCurve(HDC hdc) { int i; int arry1[9][2]={100,300,120,200,220,200,270,100,370,100,420,200,420,300,220,280,100,300}; int arry2[9][2]={70,-70,70,-70,70,-70,70,-70,70,70,70,70,-70,70,-70,70,70,-70}; for(i=0;i<8;i++) { SetColor(RGB(0,0,255),hdc); line(hdc,arry1[i][0],arry1[i][1],arry1[i+1][0],arry1[i+1][1]); SetColor(RGB(255,0,0),hdc); Hermit3(hdc,arry1,arry2,i,100); } } void Hermit3(HDC hdc,int arry1[2][2],int arry2[2][2],int n,int steps) { int i,x,y,k1,k2,k3,k4,m1,m2,m3,m4; float a0,a1,a2,a3,b0,b1,b2,b3,dt,t,t2,t3; k1=arry1[n][0]; k2=arry1[n+1][0]; k3=arry2[n][0]; k4=arry2[n+1][0]; m1=arry1[n][1]; m2=arry1[n+1][1]; m3=arry2[n][1]; m4=arry2[n+1][1]; 2016/3/6 计算机图形学演示稿 纪玉波制作 (C)
2016/3/6
计算机图形学演示稿 纪玉波制作 (C)
8
将边界条件P(0) ﹦Pk和P(1) ﹦Pk+1代入方程得: Pk ﹦d Pk+1﹦a﹢b﹢c﹢d
一阶导数为:
将边界条件P’(0)﹦Dk和P’(1)﹦Dk+1代入方程得: Dk ﹦c Dk+1﹦3a﹢2b﹢c
2016/3/6 计算机图形学演示稿 纪玉波制作 (C) 9
2016/3/6
计算机图形学演示稿 纪玉波制作 (C)
3
4.1.3 参数连续性条件 0阶导数连续性,记作C0连续,是指曲线相连。即第一 个曲线段在u﹦1处的x,y,z值与第二个曲线段在u﹦0处的 x,y,z值相等。 一阶导数连续性,记作C1连续,指两个相邻曲线段在 交点处有相同的一阶导数。 二阶导数连续性,记作C2连续,指两个相邻曲线段在 交点处有相同的一阶和二阶导数。高阶参数连续性可类 似定义。 0阶几何连续性,记为G0连续,与0阶导数连续性相同。 即两个曲线段在公共点处有相同的坐标。 一阶几何连续性,记为G1连续,指一阶导数在两个相 邻段的交点处成比例,而大小不一定相等。 二阶几何连续性,记为G2连续,指两个曲线段在相交 处其一阶和二阶导数均成比例。G2连续下,两个曲线段在 交点处的曲率相等。
y(u)﹦(2yk-2yk+1+yk'﹢yk+1')u3
﹢(-3yk﹢3yk+1-2yk'-yk+1')u2+yk'u﹢yk ﹢(-3zk﹢3zk+1-2zk'-zk+1')u2+zk'u﹢zk
z(u)﹦(2zk-2zk+1+zk'﹢zk+1')u3
如果是平面曲线,则只有x和y分量。
2016/3/6 计算机图形学演示稿 纪玉波制作 (C) 15