370 likes | 534 Views
计算机图形学 曲线曲面. 曲线曲面概述 参数曲线基础 曲线构造方法 三次参数曲线. 目录. 曲线曲面概述. 图形学中一个很复杂的又非常重要的研究领域。 曲线曲面才是造型的真正统治者,它占据了我们生活和幻想中的造型的绝大部分。 但曲线曲面又是如此地难以理解,让人们在一段很长很长的时间内无法征服它。 自由曲线和曲面 规则的曲线和曲面,比如:圆和球,可以用固定的函数表达式来构造,但是他的造型能力有限,我们这儿不讨论。 自由曲线和曲面是指那些形状比较复杂、不能用初等解析函数直接表示出来的曲线和曲面。
E N D
曲线曲面概述 参数曲线基础 曲线构造方法 三次参数曲线 目录
曲线曲面概述 • 图形学中一个很复杂的又非常重要的研究领域。 • 曲线曲面才是造型的真正统治者,它占据了我们生活和幻想中的造型的绝大部分。 • 但曲线曲面又是如此地难以理解,让人们在一段很长很长的时间内无法征服它。 • 自由曲线和曲面 • 规则的曲线和曲面,比如:圆和球,可以用固定的函数表达式来构造,但是他的造型能力有限,我们这儿不讨论。 • 自由曲线和曲面是指那些形状比较复杂、不能用初等解析函数直接表示出来的曲线和曲面。 • 它的应用极为广泛,在动画领域上举足轻重,在造型工业设计上更是独占鳌头。汽车车身、飞机机翼和轮船船体等的曲线和曲面均属于这一类。
曲线曲面概述 • 自由曲线和曲面发展过程 • 自由曲线曲面的最早是出现在工作车间,为了获得特殊的曲线,人们用一根富有弹性的细木条或塑料条(叫做样条),用压铁在几个特殊的点(控制点)压住样条,样条通过这几个点并且承受压力后就变形为一条曲线。人们调整不断调整控制点,使样条达到符合设计要求的形状,则沿样条绘制曲线。 • 1963年,美国波音,Ferguson提出使用参数三次方程来构造曲面 • 1964~1967年,美国MIT,Coons用封闭曲线的四条边界来定义曲面 • 1971年,法国雷诺汽车,Bezier提出用控制多边形来定义曲线和曲面 • 1974年,美国通用汽车,Cordon和Riesenfeld, Forrest, B样条曲线曲面 • 1975年,美国Syracuse大学,Versprille有理B样条 • 80年代,Piegl和Tiller, 非均匀有理B样条,NURBS方法
曲线曲面概述 • 对于曲线曲面设计方法的要求: • 几何意义直观,设计不必考虑其数学表达 • 形状易于预控制和修改,修改其中一点,不影响全局,只有在很小范围内的形状受到影响 • 几何不变性,对在不同测量坐标系测得的同一组数据点进行拟合,用同样的数学方法得到的拟合曲线形状不变。 • 易于定界,寻找边界 • 易于实现光滑连接 • 统一的数学表示,便于建立统一的数据库
曲线曲面概述 参数曲线基础 曲线构造方法 三次参数曲线 Beizer曲线 B样条曲线 目录
参数曲线基础 • 显式、隐式和参数表示 • 曲线和曲面都有参数表示和非参数表示之分 • 在非参数中又分为显式和隐式表示 • 显式表示:每个x值对应一个y值 • 比如:一条直线y=ax+b,一条平面曲线y=f(x)。可以想象,显式表示不便于表示圆(1个x有2个y),更不便于表示封闭的曲线和曲面 • 隐式表示:区别于显式,一般形式为f(x,y)=0 • 比如:ax2+bxy+cy2+dx+ey+f=0;这是一个圆锥曲线,可以调整a,b,c,d,e,f来得到不同的圆锥曲线 • 显式和隐式的局限性: • 值变化都与坐标轴有关,不便于计算和编程,不便于表示3维甚至更高维空间,会出现斜率为无穷大的情形(如垂线)等等。
参数曲线基础 若t的区间:[a,b],如果把它转换为[0,1] ,规格化如何做?t’=(t-a)/(b-a) , 则 t’ [0,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)]。 由于我们没有必要去研究u从负无穷到正无穷的整个参数空间,所以我们常常把参数规格化,即参数区间通常为[0,1]
圆的参数方程 参数曲线基础 • 显式、隐式和参数表示 • 我们来看看最简单的过2点的直线参数方程表示,如下 • 把p1[1,2],p2[4,3]带入方程得p(t)=[1,2]+[3,1]t,t [0,1] • 用参数表示的x,y分量为:x(t)=x1+(x2-x1)t=1+3t, y(t)=y1+(y2-y1)t=2+t • P’(t)表示切向量=[x’[t] y’[t]]=[3,1],实际上代表该直线段的斜率为:dy/dx = y’[t]/x’[t] = 1/3
参数曲线基础 • 参数表示的优点 • 1)有更大的自由度来控制曲线、曲面的形状 • 比如:y=ax2+bx+c有3个系数a,b,c。但是相应的参数表示,X=at2+bt+c,y=dt2+et+f,有6个系数可以控制曲线 • 2)对曲线、曲面进行变换,可对其参数方程直接进行几何变换。 • 对于非参数方程,变换时需要对每个坐标联动变化,但是参数方程可以在平移、比例等变换中直接操作某一个坐标或者某几个坐标,节省工作量。 • 3)便于处理斜率为无穷大的情形,不会因此而中断计算。 • 4)便于用户把低维空间中曲线、曲面扩展到高维空间去。 • 参数方程中,代数、几何相关和无关的变量是分离的,变量个数不限制,这种变量分离的特性可以让我们用数据公式去处理几何分量,比如后面学到的调和函数。 • 5)规格化的参数变量t∈[0, 1],使其相应的几何分量是有界的,而不必用另外的参数去定义边界。 • 6)易于用矢量和矩阵表示几何分量,简化了计算。 • 后面我们都用参数表示来讨论曲线和曲面问题。
参数曲线基础 • 参数曲线相关术语 • 一条参数表示的3维曲线是一个有界的点集,可以写成一个带参数的、连续的、单值的数学函数,形式为: • x=x(t),y=y(t),z=z(t) t [0,1] 下面我们要来学习一系列的相关术语: 位置矢量、切矢量、法矢量、曲率和挠率等等
参数曲线基础 • 参数曲线相关术语 • 位置矢量:曲线上任意一点的位置矢量(即坐标),可以用矢量p(t)表示,p(t)=[x(t),y(t),z(t)] 为什么选参数t呢,物理上可以把3维空间的曲线理解为一个动点的轨迹,表示位置矢量p随时间变化
参数曲线基础 • 参数曲线相关术语 • 切矢量 • 坐标变量关于参数的变化率 • 物理上代表曲线在某点的运动方向 曲线上R,Q两点参数分别是t和t+△t. 当Q趋向R,也就是△ t→0 导数 的方向P’(t)就代表了R点的切线方向 导数 的大小就可以近似表示△P的长度也可以近似表示这一段弧长△ S
参数曲线基础 • 参数曲线相关术语 • 弧长 • 当n →∞,可以把弧长表示为无数段p0p1,p1p2….的长度组成 • 而当p0与p1的△ t→0时,p0p1可以近似的表示为 • 于是从0到t的弧长可以表示为:
参数曲线基础 • 参数曲线相关术语 • 弧长参数表示法与单位切矢量 弧长与参数t无关,与坐标系也无关,以弧长为参数表示曲线易于讨论曲线本身固有的性质。 P=P(s)
参数曲线基础 • 参数曲线相关术语 • 主法矢、副法矢 • 主法矢是和切矢量垂直的一个矢量,如何推导出来它等于什么呢? • 假设T(s)是曲线在某段的单位切矢量,所以T2(s)=1 • 对上式两边求导得到 ,说明T(s)与T’(s)垂直 • 由于T’(s)可能不是单位矢量,所以设 • 其中k(s)是一个标量,等于T’(s)的大小,N(s)是单位矢量 • 单位矢量N(s)定义为曲线的主法线单位矢量,简称为主法矢;主法矢N(s)总是指向曲线弯曲的方向,其实他是T(s)求导后得到的矢量的方向 • 其中标量k(s)就是曲率的倒数,大小为单位切矢量导数的模。
参数曲线基础 • 参数曲线相关术语 • 主法矢、副法矢 • 主法矢是和切矢量垂直的一个矢量 • 假设,T是单位切矢量,那么单位主法矢N的方向等于对切矢量求导 • 矢量积 是第三个单位矢量,它垂直于T和N。把平行于矢量B的法矢称为曲线的副法矢 T(切矢)、N(主法矢)和B(副法矢)构成了曲线上的活动坐标架 N、B构成的平面称为法平面,N、T构成的平面称为密切平面,B、T构成的平面称为副法平面。
参数曲线基础 • 参数曲线相关术语 • 曲率和曲率半径:其几何意义是曲线的单位切矢对弧长的转动率,也就是P(s)到P(s+ds)这段弧的弯曲程度。
参数曲线基础 • 参数曲线相关术语 • 绕率: 等于副法线方向(或密切平面)对于弧长的转动率,反应了曲线的扭绕特性。 • 平面曲线中密切平面是曲线所在平面,所以副法矢固定不变,所以绕率总是=0,非平面曲线副法矢变化了,会对曲线产生扭动的效果。 T(切矢)、N(主法矢)和B(副法矢)
曲线曲面概述 参数曲线基础 曲线构造方法 三次参数曲线 目录
曲线构造方法 • 插值法 • 给定一组有序的数据点Pi,i=0, 1, …, n,构造一条曲线顺序通过这些数据点,称为对这些数据点进行插值,所构造的曲线称为插值曲线。
曲线构造方法 • 插值法 • 线性插值:假设给定函数f(x)在两个不同点x1和x2的值,用线形函数:y=ax+b,近似代替,称为的线性插值函数。 • 抛物线插值:已知在三个互异点x1,x2,x3的函数值为y1,y2,y3,要求构造函数 ¢(x)=ax2+bx+c,使得¢(x)在xi处与f(x)在xi处的值相等。
曲线构造方法 • 逼近法 • 构造一条曲线使之在某种意义下最接近给定的数据点(但未必通过这些点) 。常见有:最小二乘法、回归分析 • 在前面的插值法中,如果给定的点(叫做型值点)太多,很难构造插值函数,因此可以适当的放弃一些型值点。 • 型值点:是用于确定曲线和曲面的位置与形状,且相应曲线或曲面一定经过的点。 • 控制点:是用于确定曲线和曲面的位置与形状,但相应曲线或曲面不一定经过。 • 插值点:是在型值点或控制点值之间插入的一系列点。 • 在计算数学中,拟合通常指用一些性质较好的函数近似表示一些性质不好的函数。在计算机图形学中,拟合继承了这方面的含义,因此插值和逼近都可以视为拟合。
曲线构造方法 • 判断哪些是插值、哪些是逼近
曲线构造方法 • 连续性条件 • 在拟合过程中,不同控制点和型值点控制的曲线段不一样,我们可能用多组曲线段去组合一条最终的拟合曲线,多条曲线首尾相连形成一条曲线,为了让连接处具有合乎要求的连续性,因此需要定义连续性条件 • Examples: • These two curves do not fit together at all. • These two curves fit together, but not smoothly. • These two curves fit together smoothly.
曲线构造方法 • 连续性条件 • 参数连续性 • 用 C 阶数表示 • C0连续(0阶参数连续) ——前一段曲线的终点t=1与后一段曲线的起点t=0相同。 • C1连续(一阶参数连续) ——连接点处一阶导数相同,切矢相同 • C2连续(二阶参数连续) ——连接点处一阶导数和二阶导数相同,切矢、法矢相同
曲线构造方法 我们已经看到, 连续保证 连续, 连续能保证 连续,但反过来不行。也就是说 连续的条件比 连续的条件要苛刻。 • 连续性条件 • 几何连续性 • 用 G 阶数表示 • G0连续(0阶几何连续) ——与C0连续相同。 • G1连续(一阶几何连续) ——一阶导数在连接点成比例,2个切矢量方向相同,大小不同。 • G2连续(二阶几何连续) ——两相邻曲线段的连接点处一阶导数和二阶导数均成比例,所以2个主、副法矢方向相同,2个切矢量方向相同。大小成比例。
曲线曲面概述 参数曲线基础 曲线构造方法 三次参数曲线 Beizer曲线 B样条曲线 目录
三次参数曲线 • 三次参数曲线的代数和几何形式 • 代数形式 • 我们以最常见的三次参数曲线为例,讨论参数曲线的代数和几何形式。 • 下面为一般的三次参数曲线的代数形式: • 从a3x到a0x有12个系数为代数系数,它们确定了这条参数曲线的形状和位置。系数不同则曲线不同。 • 把它改写为矢量表达:
三次参数曲线 • 三次参数曲线的代数和几何形式 • 代数形式 • 把前面的代数方程改写为矢量形式 • P(t)表示曲线上任一点的位置矢量;系数a0表示(a0x,a0y,a0z) • 我们尝试用已知条件来求解这些系数。可供选择的已知条件有:端点坐标、端点坐标的切矢量、法矢量、曲率、绕率等等。对于上面的三次参数曲线,我们使用4个已知条件即可:P(0),P(1), P’(0),P’(1)
三次参数曲线 • 三次参数曲线的代数和几何形式 • 几何形式 • 对三次参数曲线,若用其端点位矢P(0)、P(1)和切矢P¢(0)、P¢(1)描述。 • 将P(0)、P(1)、P¢(0)和P¢(1)简记为P0、P1、P¢0和P¢1,代入
三次参数曲线 • 三次参数曲线的代数和几何形式 • 几何形式 • 把a0,a1,a2,a3代入原式,整理后可得
三次参数曲线 • 三次参数曲线的代数和几何形式 • 几何形式 • 上式是三次Hermite(Ferguson)曲线的几何形式,几何系数是P0、P1、P¢0和P¢1。 • 称为调和函数(或混合函数)
三次参数曲线 例:给定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插值方法绘制曲线。 解:p0=(100,300) p1=(120,200) p0’=(70,-70) p1’=(70,-70) For(t=0;t<=1;t=t+0.1)或 For(t=0;t<=1;t=t+0.01)或