《产品建模中nurbs曲线的连续性研究》由会员分享,可在线阅读,更多相关《产品建模中nurbs曲线的连续性研究(11页珍藏版)》请在金锄头文库上搜索。
1、产品建模中 NURBS 曲线的连续性研究摘要:优秀的产品数据模型能够大大地提高设计生产各个环节的工作效率,本文以 Rhino 为例,探讨了建立 NURBS 数据模型中最基础而最重要的工作调整曲线的连续性,提出了调整曲线从 G0 连续到 G3 以上连续性的几种方法。关键词:NURBS,曲线连续,产品建模一、 曲线的几何连续性连续性在计算机辅助设计领域是一个非常重要的概念,大多数情况下因为无法用一条曲线(曲面)来完整地描述产品,需要多条曲线(曲面)拼接才能实现,那么无论从产品的外观设计需要、力学结构需要、加工需要等方面,都要求各个拼接曲线(曲面)之间保持良好的光滑和统一性,这种统一性表现在数学上就
2、要用曲线(曲面)的连续性来保证。在建立数据模型的时候,曲面都是在曲线的基础上建立起来的,曲线的质量直接决定了曲面的质量,因此本文以 Rhino 为例着重探讨建模中 NURBS 曲线的连续性问题。在数学上,常用参数连续的概念 C0、C1、C2 来描述两端曲线曲面之间的连续性关系, “如果曲线在连接处具有直到 n 阶连续导矢,即 n 次连续可微,这类光滑度称之为 或 n 阶参数连续性” 1,也就是说如果两C段曲线在连接点具有对参数 u 的相同的 n 阶导数,那么就称它们为在连接点 n 阶参数连续。例如 连续是指两段曲线在连接点处 2 阶导数相等,这2对于两段拼接曲线的参数提出了严格的要求。在工程应
3、用上,人们发现数学上严格的参数连续性并不能保证两段曲线曲面的光滑,因此采用了相对宽松的几何连续性 (Geometric Continuity)概念,几何连续性延续了nG参数连续的部分要求,但主要着眼于工程产品的表面视觉特征。G0 连续(位置连续):两条曲线的端点位于同一位置,即第一条曲线的末端点与第二条曲线的首端点重合,位置连续是两条曲线摆脱不连续状态的最低条件。G1 连续(相切连续):两条曲线符合 G0 连续,而且在端点重合的地方切线方向相同。 G2 连续(曲率连续):两条曲线满足 G1 连续条件,而且在端点重合的地方曲率半径相同。G3 连续:如果两条曲线在连接点对各自弧长的 3 阶导数相等
4、,则两条曲线在连接点具有 3 阶连续性,它的几何意义是两条曲线的曲率变化率相等。G4 连续:可以理解为两条曲线在连接点曲率变化率的变化率相等,更高阶的连续性可以计算,但很难有直观的几何意义。在产品设计实践中,应用比较普遍地是 G0、G1 和 G2 连续,对曲面要求比较高的产品如汽车外壳、飞机外壳等则要求更高的曲线曲面间的连续性。二、 调整两条曲线连续性在 Rhino 中所建的 Nurbs 曲线可以是单条曲线,也可以是多条曲线拼接而成,相应地曲线连续性问题就分为单条曲线连续性和多条曲线间连续性两种情况。单条曲线分为单跨距曲线和多跨距曲线两种,曲线内是处处连续的,曲线内不同跨距间连续性阶数是曲线的
5、阶数减一,比如多跨距 3阶曲线,其跨距间可达到 2 阶连续;多跨距 5 阶曲线,其跨距间可达到 4阶连续,依次类推。在现实设计和生产中,产品形状千变万化,很多时候用单条曲线很难表达产品形状,转而用多条曲线拼接来表达形态。所以目前在生产中遇到最多的就是如何拼接多条曲线,使之达到更好的连续性。下面我们以两条曲线为例,讨论如何使之连续。在 Rhino 中,调整拼接曲线的连续性有自动和手动两种方法。对于自动调整的方法,程序提供了调节曲线间连续性的工具 (衔接曲线) ,可以进行位置连续、切线连续、曲率连续等三种连续性操作。这个工具可以把一条曲线变形从而与另一条曲线形成特定的连续性关系,变形的曲线节点只改
6、变了控制点的位置,若衔接成位置连续,曲线 2 移动一个控制点;若衔接成切线连续,则曲线 2 要移动两个控制点到新位置;若衔接成曲率连续,曲线 2 要移动 3 个控制点到新位置。对于手动调整连续性的方法,则情况比较复杂,我们在这里简单地讨论下其方法。(一) 、手动调整拼接曲线到 G1 连续:如图 1 左图所示,两条 3 阶曲线 1和 2 首尾连接,是位置连续的关系,我们手动移动曲线 2 的第二个控制点b2,使之与曲线 1 端点的前两个控制点 a1、b1 共线,则曲线 1、2 在连接点切线方向相同,达到 G1 连续,如图 1 右图所示。b2 的位置比较灵活,只要它满足前述共线条件,曲线 1、2 始
7、终达到 G1 连续。图 1 调整两条曲线至 G1 连续具体手动调整到 G1 连续的方法有很多种,可以以 a1、a2 的重合点为中心点,画出一段直线,然后分别移动控制点 b1 和 b2,使它们都位于此直线上,从而可以使 a1、b1、a2、b2 这四点共线。也可以用工具沿着a1、b1 绘出一条直线,然后把 b2 移动到这条直线上,也可以实现相同的目的。(二) 、 手动调整拼接曲线到 G2 连续:既然手动移动 b2 的位置可以很容易地使曲线 2 与曲线 1 达到切线连续,那么依此类推,有没有方法我们可以手动移动控制点,使 a2、b2、c2 同 a1、b1、c1 保持特定的位置关系,从而使曲线 2 与
8、曲线 1 达到曲率连续呢? 我们下面来讨论一下。两条曲线达到曲率连续的时候,它们连接点必须首先达到 G0 和 G1 连续,在此基础上两条曲线方程在连接点的二阶导数也相等。B 样条曲线的k 阶导数的一般方程为 1: 0nkk ki,pii(u)N(u)QP其中 (1)110ikki iiipi k() P式中, 表示曲线上第 i 个控制点, 是曲线阶数,k 是导数阶数, 是节iP iu点。这表明,B 样条曲线的导数与曲线控制点和节点结构有特定的函数关系。这个公式比较复杂,我们只例举特殊情况下的特例,看看它的几何意义。如图 2 一条 3 阶单跨距曲线,我们利用公式(1)求它在端点的切向量和曲率向量
9、。 图 2 一条 3 阶单跨距曲线 图 3 两条 3 阶单跨距曲线曲线端点的切向量就是曲线方程在端点处的一阶导数,曲率向量就是曲线在端点的二阶导数,由已知条件可知,3 阶单跨距曲线的节点矢量为0,0,0,1,1,1,进而可由式(1)计算出曲线在首端点 P0( )点和0u末端点 P3( )点的一阶导数(切向量)分别为:3u1010()QP1332()QP二阶导数(曲率向量)为:200126(u)231236(u)由计算结果我们可以看出,曲线在起点的切向量与前两个控制点有关,曲率向量与前三个控制点有关;曲线在末点的切向量与最后两个控制点有关,曲率向量与最后三个控制点有关。如图 3 所示两条 3 阶
10、 B 样条曲线,曲线 1 的 4 个控制点是 、0P、 、 ,曲线 2 的 4 个控制点是 、 、 、 ,其中点 和 重合,1P2 0R23R3R两条曲线达到位置连续关系。如果两条曲线要达到 G1 连续,则它们的连续性条件可以写成 2:(2)1032()P是一个正的常数,等于两条线段的长度比。若要两条曲线曲率连续,它们在重合点的曲率向量应该相等,结合切线连续的条件,G2 连续的条件可以写成= (3)012R123()P此处 就是切线连续的两段线段长度比。图 4 两条 3 阶单跨距曲线 图 5 两条曲线曲率连续如图 4 所示,使 =1,也就是线段 与 长度相等,再使用 (衔接曲23P01R线)使
11、它们达到曲率连续,则=123012可知线段 平行于线段 。12PR2PR 因此,如果要手动调整控制点使两条曲线达到曲率连续,可以先使和 共线并使之长度相等,然后过点 画直线平行于 ,再将曲线 223P01R 1P21PR的第三个控制点 移动到这个直线上,则两条曲线达到曲率连续。当然这2只是一个特例,我们再考虑更普遍的也就是线段 与 长度不相等的情2301况,使 =0.5,如图 5 所示,则有= (4) 012R12305.()P上式的几何意义为,在线段 上取一点 ,使 =0.25 ,过 画一条直A2P12A线平行于 ,则 点位于这条直线上时,可以满足式( 4)的连续性条件,21P2则两条曲线达
12、到曲率连续。由此,我们可总结出手工衔接曲线至曲率连续的方法和适用条件:1、若采用手工调整控制点使上述两条曲线达到曲率连续,首先使 、23P共线达到切线连续,并确定二者长度比 值,然后在 (或延长0R 0123RP1线)上选一点 A,使 = ,再过 A 做 平行线,然后结合捕捉工具将控21PA23制点 移动到此平行线上,则可使两条曲线达到曲率连续。22、由式(1)可知,曲线导数值与曲线控制点以及节点的结构有函数关系,上述手工调整控制点的方法推导,是建立在两条曲线端点节点结构相同的基础上,如果两条曲线端点节点结构不同,会推导出不同的结果,则此方法不适用。在端点位置节点结构相同的曲线包括:(1)两条
13、曲线都是单跨距曲线,阶数相同,如两条 5 阶单跨距曲线;(2)两条曲线都是多跨距曲线,阶数相同,节点均匀;(3)两条曲线阶数相同,如果是非均匀节点,节点矢量应该是首尾对称结构,例如结构为 的节点矢量满足要求,观察节点02320,5,81,矢量中下标标出的节点间距,相对于中间的节点 5 前后对称,这样就保证了曲线在起始点和终点的节点结构相同。3、在建模应用中,应用 (衔接曲线)结合 (调节曲线端点转折)指令来调节曲线连续性和曲线形态比较高效,我们可以把计算工作交给计算机来完成。手工调曲率连续可应用在一些特殊的情况下,譬如想把一条曲线的起始端和末尾端连接并调整成曲率连续,从而把曲线调成曲率连续的环
14、形,如图 6。图 6 把一条曲线调整首尾曲率连续三、更高阶的连续性如果曲面的质量要求高于连续,就需要创造更高阶的曲线连续性,但是在 Rhino 中没有提供 G2 以上的连续性工具,无法把两条曲线匹配成G3 或 G4 连续性,只能通过间接的方法来建立 G2 以上的曲线。最有效的办法就是创建高阶的单条曲线,这条曲线可以有多个节点跨距,曲线形态越复杂,就增加越多的节点跨距来实现,这种多跨距曲线的连续性是(阶数-1) ,譬如多跨距的 3 阶曲线,它在节点的连续性是 G2 连续,这是 NURBS曲线的基本性质。如图 7 所示,3 阶 B 样条曲线的基函数由跨 4 个跨距的 4 段不同的函数组合而成,函数
15、表达式已在图中示出,我们可以算出,这 4 个函数在节点的位置具有相同的 2 阶导数,也就是曲率连续的关系,这就决定了 3 阶NURBS 曲线各个分段曲线在节点是 G2 连续的关系。依此类推,如果我们要创建一条处处具有最低 G3 连续的曲线,那么可图 7 3 阶 B 样条基函数 图 8 4 阶和 5 阶曲线的曲率图以创建一条 4 阶曲线,如果需要一条处处 G4 连续的曲线,那么就需要创建 5 阶曲线,如图 8 所示 4 阶和 5 阶曲线曲率图,4 阶分段曲线在节点不仅曲率相同,曲率变化率也相同,5 阶曲线的曲率图形与 4 阶曲线相比已看不出区别了,曲率图最高只能检测曲率的差异,更高阶的连续性就需要更高阶的连续性检测工具才能看出不同。如果现有两条已经建好的曲线,我们如果想把这两条曲线匹配成 G3连续的关系,该如何操作呢?在 Rhino 中没有现成的工具能够实现这个控能,但我们也可以通过间接的方法来实现:我们先把这两条 3 阶曲线升为4 阶,再把它们调整成曲率连续并合并成一条曲线,然后再把曲线内的重复节点删除,那么这条曲线基本维持了原有的形状,并且在曲线内处处达到 G3 连续。依此类推,更高阶的连续性也可以通过同样的方法来实现。具体方法如下:曲线升阶的基本算法是要计算升阶后的曲线新控制点位置。Les Piegl & Wayne Tiller 介绍了一种非常简便的曲线升阶的算法。如图