第八章 三维对象的表示

更新时间:2023-08-28 00:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机图形学———三维对象的表示

智软件学院

计算机图形学———三维对象的表示

自由曲线和曲面是指那些形状比较复 杂、不能用初等解析函数直接表示出来的 曲线和曲面。汽车车身、飞机机翼和轮船 船体等的曲线和曲面均属于这一类。一般 情况下,它们需要利用插值或逼近的方法, 对型值点进行拟合,得到拟合曲线和曲面。

计算机图形学———三维对象的表示

8.1 曲线曲面的参数表示及连续性 8.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)]。

计算机图形学———三维对象的表示

8.1.2 插值、逼近和拟合 给出一组有序的型值点列,根据应用的要求来得 到一条光滑曲线,通常采用两种不同的方法,即插 值方法和逼近方法。 插值方法要求生成的曲线通过每个给定的型值点。 曲线插值方法有多项式插值,分段多项式插值,样 条函数插值等。 逼近方法要求生成的曲线靠近每个型值点,但不 一定要求通过每个点。逼近方法有最小二乘法, Bezier方法,B样条方法等。 用插值或逼近来构造曲线的方法通称为曲线拟合 方法。

计算机图形学———三维对象的表示

8.1.3 参数连续性条件 0阶导数连续性,记作C0连续,是指曲线相连。即第一 个曲线段在u﹦1处的x,y,z值与第二个曲线段在u﹦0处的 x,y,z值相等。 一阶导数连续性,记作C1连续,指两个相邻曲线段在 交点处有相同的一阶导数。 二阶导数连续性,记作C2连续,指两个相邻曲线段在 交点处有相同的一阶和二阶导数。高阶参数连续性可类 似定义。 0阶几何连续性,记为G0连续,与0阶导数连续性相同。 即两个曲线段在公共点处有相同的坐标。 一阶几何连续性,记为G1连续,指一阶导数在两个相 邻段的交点处成比例,而大小不一定相等。 二阶几何连续性,记为G2连续,指两个曲线段在相交 处其一阶和二阶导数均成比例。G2连续下,两个曲线段在 交点处的曲率相等。

计算机图形学———三维对象的表示

8.1.4 参数样条曲线 1.样条曲线 在计算机图形学中,术语样条曲线指由多项式 曲线段连接而成的曲线,在每段的边界处满足特 定连续条件。而样条曲面可用两组正交样条曲线 来描述。样条用来设计曲线和曲面形状,典型的 CAD应用包括汽车、飞机和航天飞机表面设计以 及船壳设计。 2.参数样条表示 在计算机图形

学应用中使用几种不同的样条描 述。每种描述是一个带有某特定边界条件多项式 的特殊类型。

计算机图形学———三维对象的表示

例如空间一条曲线用三次参数方程可以表示如下: 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就可以求出。解出各个系数后的上) 式就是一种确定的三次参数样条表示式。

计算机图形学———三维对象的表示

8.2 三次样条插值曲线 实际上,通常使用的是三次样条曲线。这是因 为三次多项式曲线是能使曲线段的端点通过特定的 点,并能使曲线段在连接处保持位置和斜率连续性 的最低阶次的多项式。与更高次多项式相比,三次 多项式只需较少的计算和存储且较稳定,而更低次 多项式又难以用来描述复杂形状的曲线。 如果想使用三次样条获得一条通过各个型值点 的连续曲线,需要利用三次样条分段插值得到通过 每个型值点的分段三次样条曲线。对n+1个型值点, 分段插值时段与段之间要建立合适的边界条件,既 能使各段之间平滑连续,又可建立起足够的方程数, 求出所有的系数。

计算机图形学———三维对象的表示

8.2.1 Hermite 样条插值曲线 Hermite样条插值(以法国数学家Charles Hermite 命名)使用型值点和型值点处的一阶导数建立边界条 件。设P和P为第K个和第K+1个型值点,Hermite样条 插值边界条件规定为: P(0) ﹦Pk P(1) ﹦Pk+1 P’(0)﹦Dk P’(1)﹦Dk+1 其中,Dk和Dk+1分别为Pk和Pk+1处的一阶导数。 将参数方程写成矩阵形式为:

计算机图形学———三维对象的表示

将边界条件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

计算机图形学———三维对象的表示

由边界条件构成的4个方程联立: Pk ﹦d Pk+1﹦a﹢b﹢c﹢d Dk ﹦c Dk+1﹦3a﹢2b﹢c 写成矩阵的形式为:

计算机图形学———三维对象的表示

解此方程得:

计算机图形学———三维对象的表示

称为Hermite矩阵,插值样条参数方程可以写成

计算机图形学———三维对象的表示

将上式展开写成代数形式为: 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)是相同的。

计算机图形学———三维对象的表示

下图表示出Hermite样条曲线的调和函数随参数u变化的曲线

计算机图形学———三维对象的表示

还可将方程整理成如下形式: 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﹢xky(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分量。

计算机图形学———三维对象的表示

例:给定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),

(70,-70)用Hermite插值方法绘制曲线。

计算机图形学———三维对象的表示

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];

计算机图形学———三维对象的表示

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;

for(i=1;i<steps;i++) { t = i*dt; t2 = t*t; t3 = t*t2; x = a0+a1*t+a2*t2+a3*t3; y = b0+b1*t+b2*t2+b3*t3;LineTo(hdc,x,y); Sleep(5); } }

本文来源:https://www.bwwdw.com/article/m1ii.html

Top