一种计算Bezier曲线之间Hausdorff距离近似值的方法及装置的制作方法

文档序号:6607277阅读:160来源:国知局
专利名称:一种计算Bezier曲线之间Hausdorff距离近似值的方法及装置的制作方法
技术领域
本发明涉及计算机辅助设计领域和模式识别领域,特别涉及一种计算Bezier曲 线之间Hausdorff距离的方法和装置。
背景技术
随着计算机技术在各个领域中的普及,计算机辅助设计越来越多地应用到了产品 设计中,例如汽车设计,飞机设计,陶瓷设计,建筑设计等,而计算机辅助设计技术的发展也 带来了一些新的需求,例如模型检索等。在这些设计中,对曲线匹配程度的计算与控制是设 计过程中经常要进行的操作。而曲线之间匹配程度和距离的度量通常采用Hausdorff距离 来进行。在陶瓷表面的图案设计中,为了确定图案曲线的插入是否合适,就要计算待插入曲 线与陶瓷模型表面现有曲线之间的Hausdorff距离,以便获得更好的插入位置。而在模型 检索中,曲线间的Hausdorff距离则能很好地反映模型之间的匹配程度,以确定被检索模 型与数据库中哪些模型相对应。而在这些计算机辅助设计应用中,最基本的曲线类型之一 为Bezier曲线,进行Bezier曲线之间的Hausdorff距离计算对计算机辅助设计的应用有 着重要的意义。Hausdorff距离定义在两个非空有界点集之间,用来衡量两个点集的不匹配程度, 给定两个点集A和B,则A与B之间的Hausdorff距离定义如下H(A,B) = max (HD (A,B),HD (B, A))其中HD (A,B)定义为单向Hausdorff距离,表示点集A中距离点集B最远的点到 B的距离。通过定义可知,H(A,B)越大,代表着A和B的相似度越差。基于这种能够反映匹配程度的性质,Hausdorff距离在匹配与识别方面有着广泛 的引用,在人脸识别领域中,通过计算人脸轮廓之间Hausdorff距离的方式对人脸进行识 别是一个重要的研究方向。对于Bezier曲线之间的Hausdorff距离来说,由于曲线上点的数目为无限多个, 因此,不能直接采用计算点集之间Hausdorff距离的方法。对于包含Bezier曲线在内的参 数曲线,存在着解方程方法,可以通过求解约束方程组获得曲线之间的Hausdorff距离,而 且该种方法求得的距离精确性能够得以保证。但现实中很多应用对Hausdorff距离的要求 并不是十分精确,只需要求出给定误差下的Hausdorff距离,另外,大多数应用都要求曲线 之间的Hausdorff距离要在比较短的时间内计算出来满足一定的实时性,而在这一点上解 方程方法往往不能达到很好的效果。

发明内容
本发明的目的在于为提高计算Bezier曲线之间Hausdorff距离的效率,满足实 际需求,本发明提供了一种计算Bezier曲线之间Hausdorff近似值的方法和装置。本发明方法包括
6
获取要进行计算的两条Bezier曲线选取固定数目的采样点,对采样点进行拟 合,得到相应的Bezier曲线,Bezier曲线的定义公式如下 其中,u表示Bezier曲线的参数,范围为W,l],Bijn(u)为Bernstein基函数,Pi 为控制顶点,对于给定的n,Bezier曲线c(u)共有n+1个控制点,η为自然数;通过相应装置将输入的Bezier曲线C1和C2进行离散化,分别得到折线(I1和d2,基 于线段集合Voronoi图的性质以及Hausdorff距离的性质,采用剪枝策略计算折线(I1到d2 的单向 Hausdorff 距离 HD (Cl1,d2)以及 d2 到 Cl1 的单向 Hausdorff 距离 HD (d2, (I1);取 HD ((I1, d2)和HD(C^d1)中的最大者作为C1和C2之间Hausdorff距离的近似值,该近似值与H (C1, C2)之间的误差可以通过离散化方法进行控制,在计算完毕之后,将计算的距离通过装置输 出ο本发明方法中将所述输入Bezier曲线c采用误差可控的离散化方法离散成一条 折线d,通过指定误差e,输出的折线d与原曲线c之间的Hausdorff距离小于e ;所述装置以一条Bezier曲线c以及离散的误差e作为输入,对于曲线c,连接其起 点和终点,得到线段L,假设c的控制点有n+1个,分别为Ptl,P1, P2,...,Pn,依次计算各个控 制点到L的距离并取最大如下dis = nJax d(PnL)如果dis > e,则说明某一控制点到L的距离超过了 e,在这种情况下,在范围(0, 1)内选取一参数t,将曲线c在该参数t的位置进行分割,得到两条子曲线,通常情况下取t =0. 5 ;对于两条子曲线,分别再连接其首尾端点,形成线段L1和线段L2,并继续检查子曲线 与对应线段之间的误差是否满足给定的e,如果满足,则整条曲线c由折线d所近似,其中, d由两段首尾相连的线段L1和L2组成;如果两条子曲线中任何一条不满足误差条件,则递 归地再从区间(0,1)中选取某个参数,在该参数处对子曲线进行分割,直到满足误差条件 为止;一般地,如果曲线C由折线d所近似,折线d中包含m段直线段,则每条直线段Si (i =1,. . .,m)都与曲线c的一段子曲线Ci所对应;直线段Si与子曲线Ci之间的Hausdorff 距离小于给定的误差e,则根据Hausdorff距离的定义,曲线c与折线d之间的HausdorfT 距离同样也小于输入的误差e ;当每一段子曲线Ci与对应的直线段Si之间的关系都满足输 入误差e之后,所述装置将当前所得到的折线d输出。本发明方法给定两条Bezier曲线C1和C2,分别在误差力和e2下将曲线用折线(I1 和d2近似,并计算Cl1和d2之间Hausdorff距离,记为HW1, d2),则可在满足误差ei+e2的条 件下用H ((I1, d2)作为C1和C2之间Hausdorff距离的近似值。本发明方法将两条输入曲线分别采用折线Cl1和d2近似,将折线Cl1和d2作为本装 置的输入,求得H(C^d2);求得两个单向Hausdorff 距离 HD ((I1, d2)和 HD (d2, (I1),根据 Hausdorff 距离定义,H (Cl1,d2) = max (HD ((I1,d2),HD (d2,(I1))最终将HW1, d2)作为本装置的输出。本发明方法中HW1, d2)的求解分为两个步骤计算HDW1, d2)和计算HD(d2,(I1),
7HD(C^d1)的计算方法与HDdd2)的计算方法类似,具体方法如下折线Cl1共有m条线段,分别为Sl,s2,...,Sffl,根据Hausdorff距离的性质, 对于折线Cl1,从其一端开始,依次处理其上的每条线段,当处理到第i条线段Si时, 装置已经计算出由S1, S2. . .,Si^1所形成的部分折线到d2的单向Hausdorff距离HD^ ((I1, (12),求得皿( d2),并与HDh^,d2)进行比较,最终HDi (屯,d2)的取值与比较结果相关;HDi (Cl1,d2) = max (HDi^1 ((I1,d2),HD (Si,d2))当处理完最后一条线段Sm后,得到的当前单向Hausdorff距离HDm(屯,d2)即可作 为装置的输出。本发明方法对折线Cl1上的每条线段Si,都需要计算HD (si; d2),根据Hausdorff距 离的下界性质对折线Cl1上的线段进行排除,以提运行速度;对于折线Cl1,从其一端开始,依次处理其上的每条线段,当处理到第i条线段Si时, 装置已计算出由S1, S2. . .,Si^1所形成的部分折线到d2的单向Hausdorff距离HD^ (屯,d2), 根据Hausdorff距离的性质,判定不等式关系是否成立HDi^1 ((I1, d2) ^ HD ((I1, d2)因此,已经求得的距离HD^1 (屯,d2)是HDW1, d2)的一个当前下界,如果HD (si; d2) 低于这个下界,则Si就是折线Cl1上的一条无效线段;假设seg是d2上任意一条线段,根据Hausdorff距离的性质,判定如下不等式关 系是否成立HD (s" d2)彡 HD (si seg)如果能在d2上找到合适的seg使得HD(Si, seg) < HDi^1 ((I1, d2),则就可以断定 HD (si; d2) < HDi^1 ((I1, d2),即可以断定Si为一条无效线段,因此可以在计算过程中跳过Si,
直接处理si+1 ;根据之前的表述,如果能找到d2上的某个线段seg,使得HD (si; seg)足够小,则将 Si排除在计算过程之外;可以借助HDh (屯,d2)的计算过程找到一个seg,使得HD(Si,seg) 足够小;考察对Cl1的遍历过程,在处理Si之前,已经刚刚处理过线段Sg,首先假设V1 不是一条无效线段,则HD (V1,d2)已经被计算,在计算HD (S",d2)的过程中,不仅该单向 Hausdorff距离被计算出来,d2上距离S^1最近的线段也可以得出,由于Si与s"之间的连 续性,距离、最近的线段距离Si也足够近,将计算HDGh,d2)过程中所得出的最近线段 记作seg,然后计算HD(Si,seg)并将HD(Si,seg) % HDi^1 ((I1, d2)比较以确定是否需要将Si 排除在计算范围之外;以上的过程建立在一个假设之上,即、是一条有效线段;如果、是一条无效线 段,则无法找出对应的seg以进行排除Si的工作,此时,需要维护一个计数器SkipCoimter, 该计数器表明在迭代折线Cl1的过程中,Cl1上有多少条连续的直线段被跳过,即连续出现了 多少个无效线段;在处理线段Si时,如果计数器SkipCoimter不为零,则说明当前装置中所 维护的seg已经失效,不再距离Si足够近,需要进行调整;本装置中对其调整策略如下从 seg位于d2上的位置开始,在d2上向前和向后各遍历SkipCoimter条线段,在这些线段中 找出距离Si中点最近的一个作为新的seg。
本发明方法在计算HDW1, d2)的过程中对折线Cl1上的无效线段进行排除,在进行 HD ((I1, d2)的计算前确定HDW1, d2)的下界初始值,以便在计算HDW1, d2)的过程中将更多 的无效线段排除;通过在Cl1上选取采样点的方式获得一个初始值作为HDW1, d2)的初始下界,这样 仍然可能将折线Cl1的第一条线段以及其后的多条线段排除,提高装置的运行速度;选取采样点确定初值的方法如下假设折线Cl1由m-1条线段组成,则Cl1上有m个 顶点,在这m个顶点中选取M个顶点,且要求这M个顶点中必须包含折线Cl1的首尾两个端 点;对于所取到的这些采样点,分别求得其中每个点到d2的最近距离,假设这些点分别为 Qi j Q2 ? Q3· · · Qm'贝 IjInitialDis 二 max d(Qt,d2)根据Hausdorff距离定义,所求得的InitialDis仍然是HD (屯,d2)的一个下界,可 以将该下界作为迭代Cl1之前的初始下界。本发明方法在求得折线Cl1到折线d2单向Hausdorff距离过程中计算(I1上某条 线段s到折线d2的单向Hausdorff距离,所述装置的输入为一线段s和一折线d2,输出为 HD (s,d2);考虑线段S,并将折线d2看作线段集合,该集合中包含η条线段,从d2的一端开 始依次处理其中的每条线段bi;其中i = 1,...,η ;当装置处理到线段h的时候,线段b1; b2. . . Iv1已经被处理完毕;装置中始终维护两个结构第一个结构为一个线性表Pg,该表 依次保存了线段集合Ib1, b2,. . .,IvJ所形成的Voronoi图与s的交点将线段s所分割成 的子线段,这些子线段是从s的某一端开始顺次保存,且每个子线段对应且仅对应集合Ib1, b2,. . .,IvJ中的唯一一条线段;第二个结构为一个映射R^Pi-r > Ib1, b2, ... , VJ,该 映射表明,如果某个子线段ss属于线性表Pp1,那么必然可以通过映射Rh找到集合Ib1, b2,... ,b^}中与之对应的线段b,而且能保证ss到集合Ib1A2,... ,IvJ的单向HausdorfT 距离只可能产生在线段b上,而不会产生在集合Ib1, b2,. . .,IvJ中的其他线段上;对于当前正在处理的线段bi;依次检查P"中的每条子线段ss,通过映射Rp1找到 与之对应的线段b。ld,求得bi与b。ld的平分线将SS所分割成的子线段集合S。对于S中的 每条线段sub,确定其到h与札1(1之间的最近距离;如果d(sub,bold) < (Ksub^i)成立,就 将映射sub- > b。ld加入新的映射Ri,否则将sub- > h加入映射Ri ;当对d2中的每条线段h做以上方式的处理之后,最终得到一个线性表Pn和映射 Rn,根据以上方法,Pn中所存放的即为线段集合Ib1, b2,b3,. . .,bj形成的Voronoi图将线 段s分割成的子线段,映射Rn中存放着子线段集合Pn到Ib1, b2,...,bn}的一个映射;对于 Pn中的每个子线段ss,通过映射Rn可找出集合Ibplvb3,...,bn}中与之对应的线段b,使 得HD(ss,d2)只可能产生在线段b上,则根据Hausdorff距离的定义可通过如下公式求得 折线Cl1到折线d2的单向Hausdorff距离如下HD、S, di) = m^i HD{ss, b)即求得Pn中的每条子线段ss到对应线段b的单向Hausdorff距离,并取所有距 离中的最大者作为HD (s,d2),最后将HD (s,d2)作为所述装置的输出。
9
在求得线段s到折线d2的单向Hausdorff距离HD (s,d2)的过程中,折线d2上的 每条线段都参与了计算;可将d2上不产生距离HD(s,d2)的线段进行部分排除设、和bj是d2上两条不同的线段,如果有以下不等式成立MD (s, bj) > HD(s, bj)则可断定bj不能产生HD (s,d2),因此可以将bj排除;其中MD (s,b」)定义如下MD(s,bj) = nand(P,bj)其中MD表示^ljbj的最近距离;对于给定的s,在求得HD (s,d2)过程中,处理到 d2上线段Sj的时候,如果找到另一条线段bi;满足关系MD (s,bj) >HD(s, b》,就可以将… 排除;在处理到Cl1上的线段s时,所述装置中维护了 d2上的一个线段,该线段与s的距离足 够近,将该线段作为bi;来对所处理的线段bj进行排除,以提高所述装置的运行速度。本发明提供的一种计算Bezier曲线之间Hausdorff距离近似值的装置,其特征在 于将输入的两条Bezier曲线C1和C2进行离散化,根据两条曲线的离散化误差h和e2,分 别得到折线Cl1和d2,计算折线Cl1到d2的单向Hausdorff距离HD ((I1, d2)以及d2到(I1的单 向Hausdorff距离HD (d2,(I1),最后,从HD W1,d2)和HD (d2,(I1)中选择最大的一个作为H (C” C2)的近似值,即作为本装置的输出,由以下模块组成Bezier曲线离散化模块以Bezier曲线c和离散化误差e为输入,以一条折线d 为输出,输出的折线d即为曲线c的离散化结果,并满足d和c之间的Hausdorff距离H(c, d) < e。Bezier曲线的获得可从实体模型中进行提取,折线与折线之间Hausdorff距离计算模块以两条折线(I1和d2作为输入,以折线 Cl1到折线d2之间的Hausdorff距离H(屯,屯)作为输出;折线的输入则来自于曲线离散化模 块的输出。对于从辅助设计模型等应用中获取的两条Bezier曲线C1和c2,可通过曲线离 散化模块分别将曲线离散化为两条折线作为本模块装置的输入;线段到折线单向Hausdorff距离剪枝模块线段s和折线d2作为输入,以线段s到 折线d2的单向Hausdorff距离HD (s,d2)作为输出。本发明方法具有易于实现,近似误差可控,计算速度快的效果。


图1本发明装置的总体流程图;图2曲线离散化示意图;图3无效线段示意图;图4Bezier曲线离散化流程图;图5汽车设计中的车门模型;图6陶瓷模型表面图案;图7异形建筑中的窗口曲线示意图。
具体实施例方式本装置的输入为两条Bezier曲线C1和c2,以及两条曲线的离散化误差力和e2。 输出为曲线C1和曲线C2之间Hausdorff距离的近似值,该近似值与曲线C1和曲线C2之间 Hausdorff距离的误差不超过| ei+e21。获取要进行计算的两条Bezier曲线的方式视具体
10的应用而定,一般来说,对于实体模型,可使用扫描仪对模型进行扫描。在扫描所得到的数 据中,选取固定数目的采样点,对采样点进行拟合,得到相应的Bezier曲线。对于给定的两 条输入曲线C1和c2,首先采用递归分割的方法将曲线C1和C2分别离散化成折线Cl1和d2,离 散的误差分别为输入的误差值ei和e2。通过给定离散化的误差值,离散化后所形成的折线 与原有曲线的误差关系如下IH (C1, (I1) I < θι 和 IH (C1, d2) I < e2对于折线Cl1和d2,分别计算Cl1到d2的单向Hausdorff距离HD (屯,d2)和d2到(I1 的单向 Hausdorff 距离 HD(d2,(I1),最后 Cl1 和 d2 之间的 Hausdorff 距离 H((I1, d2)为 HD((I1, d2)和HD(d2,(I1)中的最大者。将HW1, d2)作为之间Hausdorff距离的近似值,将 该近似值作为本装置的输入。本装置中主要由以下几个模块装置组成1、计算Bezier曲线之间Hausdorff距离近似值的模块装置。本装置的输入为两 条Bezier曲线C1和C2以及两条曲线的离散化误差力和e2。装置将C1和C2进行离散化, 分别得到折线Cl1和d2,计算折线Cl1到d2的单向Hausdorff距离HDW1, d2)以及d2到(I1的 单向Hausdorff距离HD (d2,(I1),最后,装置从HD W1,d2)和HD (d2,(I1)中选择最大的一个作 为H(Cl,c2)的近似值,即作为本装置的输出。本装置由以下几个模块组成=Bezier曲线离 散化模块,折线与折线之间Hausdorff距离计算模块,线段到折线单向Hausdorff距离剪枝 模块。2、Bezier曲线离散化模块。该模块装置以Bezier曲线c和离散化误差e为输入,以一条折线d为输出。输 出的折线d即为曲线c的离散化结果,并满足d和c之间的Hausdorff距离H(c,d) < e。 Bezier曲线的获得可从实体模型中进行提取,可使用扫描仪对实体进行扫描,从扫描得到 的数据中选取一定数目的采样点,再通过拟合的方式形成Bezier曲线C。对于控制误差e, 可根据不同的应用需求设定。对输入曲线c的离散化过程请见附图2,该模块装置采用一个栈Stack保存待处 理的曲线。在离散化的初始阶段,首先将待离散化曲线c加入到Stack。接下来开始检查 Stack是否为空,如果不为空,则从Stack顶部取出一待处理曲线cur,连接cur的首尾端点 形成线段L,接下来求得曲线cur的各个控制点到L的距离。如果各个控制点到L的距离都 小于等于e,则保存线段L,然后继续检查Stack中是否还有待处理曲线。否则,如果至少有 一个控制点到L的距离大于e,就需要对当前正在处理的曲线cur进行分割。分割的参数位 置为(0,1),通常选取0. 5。分割后得到两条子曲线Cur1和Cur2,将cur2和Cur1顺次压栈 至Stack。然后继续检查Stack是否为空。当栈Stack中没有待处理曲线,则当前所保存的线段组成一条折线d,d就是在误 差e下对输入曲线c的近似,将折线d作为本模块装置的输出。3、折线与折线之间Hausdorff距离计算模块该模块以两条折线Cl1和d2作为输入,以折线Cl1到折线d2之间的Hausdorff距离 H(Clpd2)作为输出。折线的输入则来自于曲线离散化模块的输出。对于从辅助设计模型等应用中获取 的两条Bezier曲线C1和C2,可通过曲线离散化模块分别将曲线离散化为两条折线作为本
11模块装置的输入。这里以计算HDW1, d2)的过程阐述折线到折线单向Hausdorff距离的计算方法, HD(d2, (I1)的计算过程类似,最终本模块以HDW1, d2)和HD(d2,(I1)中的最大者作为HW1, d2)。假定折线Cl1共有m条线段,分别记为Sl,s2,. . .,sm,根据Hausdorff距离的性质,HDidl ,d2)= max HDijsi,d2)
L J/=1’…,m对于折线Cl1,本装置从其一端开始,依次处理其上的每条线段,当处理到第i条线 段Si时,装置已经计算出由Sl,S2. . .,Sh所形成的部分折线到d2的单向Hausdorff距离 HDi^1 ((Iij(I2)0求得HD (Si,d2),并与HDp1(C^d2)进行比较,最终HDi W1,d2)的取值与比较结 果相关。HDi (Cl1,d2) = max (HDi^1 ((I1,d2),HD (Si,d2))HDi^1 (d” d2)是HD (d” d2)的一个下界,如果能够预测HD (Si,d2)小于该下界,则可 以避免计算HD (Si, d2),减少运算量,提高本装置的效率。假设seg是d2上任意一条线段,根据Hausdorff距离的性质,有如下不等式关系 成立HD (s" d2) ( HD (si seg)如果有HD (Si,seg) < HDi^1 ((I1, d2),就可以断定 HD (si; d2) < HDi^1 ((I1, d2),即可以 断定Si为一条无效线段,因此可以在计算过程中跳过Si,直接处理si+1。这里的预测是利用了迭代过程中位于s的上一相邻线段Sg的信息,在计算 HD(Si^1, d2)的过程中总能找到d2中的一条线段seg距离S"最近,可以近似认为seg距离 Si最近,通过比较HD (Si,seg)与HDW1, d2)的下界,从而判定Si是否为一条无效线段。如 果Si是一条无效线段,则可以直接跳过Si,处理si+1,否则,仍需求得HD (Si,d2)。如果S"是一条无效线段,则无法找出对应的seg以进行排除Si的工作。此时, 需要维护一个计数器SkipCoimter,该计数器表明在迭代折线(I1的过程中,(I1上有多少条 连续的直线段被跳过,即连续出现了多少个无效线段。在处理线段Si时,如果SkipCoimter 不为零,则说明当前装置中所维护的seg已经失效,不再距离Si足够近,因此,需要进行调 整。本装置中对其调整策略如下从seg位于d2上的位置开始,在d2上向前和向后各遍历 SkipCounter条线段,在这些线段中找出距离Si中点最近的一个作为新的seg。然而,当本装置处理折线Cl1上第一条线段的时候,还没有可以使用的初始下界。 本装置通过在Cl1上选取采样点的方式获得一个初始值作为HDW1, d2)的初始下界,这样 仍然可能将折线Cl1的第一条线段以及其后的多条线段排除,提高装置的运行速度。本装 置在对折线Cl1的第一条线段处理之前,在折线Cl1的的各个顶点中选取M个顶点作为采样 点,且要求这M个顶点中必须包含折线Cl1的首尾两个端点。对于所取到的这些采样点,分 别求得其中每个点到d2的最近距离,如果将这些顶点分别记为Q1, Q2, Q3. . . QM,则初始距离 InitialDis可按如下方法计算
「00931 InitialDis = max Ci(Q^d2)根据Hausdorff距离定义,所求得的InitialDis仍然是HD (屯,d2)的一个下界,可 以此为基础进行HDdd2)的计算。通过此种方法,本装置模块在将折线Cl1上所有线段遍历之后,就得到了折线Cl1到折线d2的单向Hausdorff距离。对于HD(C^d1),本模块采用同样的流程进行计算,最终,将 HD (d2,(I1)和 HD (d2,(I1)中最大者作为 HW1, d2)。4、线段到折线单向Hausdorff距离剪枝模块在折线到折线单向Hausdorff距离装置模块中,需要计算折线(I1上某条线段s到 折线d2的单向Hausdorff距离。本模块就以线段s和折线d2作为输入,以线段s到折线d2 的单向Hausdorff距离HD (s,d2)作为输出。考虑线段S,并将折线d2看作线段集合,该集合中包含η条线段,从d2的一端开始 依次处理其中的每条线段bi;其中i = 1,...,n。装置中维护两个结构第一个结构为一个 线性表Ph,该表依次保存了线段集合Ibpb2,. . . ,b^}所形成的Voronoi图与s的交点将 线段s所分割成的子线段,这些子线段是从s的某一端开始顺次保存,且每个子线段对应且 仅对应集合Ib1, b2,. . .,IvJ中的唯一一条线段;第二个结构为一个映射Ri^Pi-i- > Ib1, b2,. . .,IvJ,该映射表明,如果某个子线段ss属于线性表Pg,那么必然可以通过映射Rh 找到集合Ib1, b2, ..., IvJ中与之对应的线段b,且子线段ss位于线段集合Ib1, b2,..., IvJ所形成的Voronoi图中线段b确定的Voronoi区域中。依次处理折线d2上的的线段,对两个数据结构进行更新,当折线d2上的所有线段 处理完毕,得到线性表? 。分别求得线性表Pn中每条子线段到其对应线段的单向HausdorfT 距离,取所有距离中的最大者作为本模块装置的输出。在装置的计算过程中,折线d2上的每条线段都参与计算,然而对于一些无效线段 可以予以剪枝排除。设bi和bj是d2上两条不同的线段,如果有以下不等式成立MD (s, bj) > HD(s, bj)则可断定bj不能产生HD(s,d2),因此可以将bj排除。其中MD(s,b」)定义如下=MD(s,bj)表示s到bj的最近距离。因此,对于给定的s,在求得HD(s,d2)过程中, 处理到d2上线段Sj的时候,如果找到另一条线段bi;满足关系MD (s,bj) > HD (s,b》,就可 以将bj排除。如折线到折线单向Hausdorff距离剪枝模块所述,在处理到(I1上的线段s时, 装置中维护了 d2上的一个线段,该线段与s的距离足够近,我们将该线段作为bi;来对所处 理的线段bj进行排除,以提高权利要求8所述装置的运行速度。为了使本发明的目的、技术方案和优点更加清晰,下面将以实施例的方式对本发 明实施方式做进一步的详细阐述。实施例1在汽车的设计中,在对汽车的各个部件进行组装时,设计到组装部件之间的吻合 度。如附图5所示,要将图中所示的车门模型安装到的车的主体。在安装之前,首先要确保 车门边缘的厚度不大于汽车主体所提供的安装槽的宽度。车门边缘的曲线成对出现,对每 一对曲线进行Hausdorff距离计算,如果某一对边缘曲线之间的Hausdorff距离大于汽车 主体模型所提供的安装槽的宽度,则说明车门无法安装至主体中。本实施例中,车门主体所 提供的安装槽宽度为500毫米。如附图5所示,车门边缘由12对曲线组成,在本实施例中, 以计算其中一对曲线的Hausdorff距离为例。为了更好地说明Bezier曲线之间Hausdorff距离在汽车设计中的应用,本实施例 按以下几个步骤进行
第一步,从车门模型中提取计算对象。由于要计算的是车门边缘曲线之间的Hausdorff距离,因此,需要从车门边缘处 进行Bezier曲线的提取。如附图3所示,首先对汽车模型采用三维扫描仪进行扫描,从扫 描仪扫描的数据中提取两组车门边缘上的采样点各500个,将采样点采用拟合的方式拟合 成Bezier曲线C1和c2,两条曲线均为3次Bezier曲线,即均具有4个控制点。其中,曲 线 C1 的控制点为(19. 73,57. 32,53. 14),(18. 14,50. 62,58. 01),(16. 80,42. 67,61. 28)和 (16. 23,34. 33,62. 48),曲线 C2 的控制点为(16. 23,34. 33,66. 52),(16. 84,43. 24,65. 33), (18. 32,51. 74,61. 96)和(20. 13,58. 95,56. 89),这里坐标值的单位均为毫米。第二步,使用曲线离散化装置模块对Bezier曲线进行离散化。在本实施例中,曲线离散化装置模块被使用两次,分别对第一步中提取出的两条 Bezier曲线进行离散化,每次离散化的输入为对应的曲线和一个离散化误差。对曲线进行离散化的过程如附图3所示。在这里需要指定离散化的误差。在本实 施例中,对两条Bezier曲线的离散化误差均设定为10_6毫米,该误差表明离散化得到的折 线与原曲线之间的Hausdorff距离不会超过该误差,在该误差控制下,离散化的结果为两 条离散线Cl1和d2,分别对应原曲线C1和C20在本实施例中,折线Cl1共包含2048条线段,同 样地,在误差10_6毫米的设置下,C2也的离散化结果d2包含2048条线段。在这样的离散误 差控制下,有如下关系成立H(Cl,(I1) < 10_6(毫米)且 H(c2,d2) < 10_6(毫米)S卩,每条Bezier曲线与其对应折线之间的Hausdorff距离都小于我们设定的误差 10_6毫米。第三步,使用折线到折线单向Hausdorff距离模块装置计算折线(I1到折线d2的单 向 Hausdorff 距离。在本步骤中,折线到折线单向Hausdorff距离模块装置的输入为步骤2中所产生 的两条折线Cl1和d2。计算折线Cl1到折线d2的单向Hausdorff距离HDW1, d2)的过程是对 Cl1上各个线段进行迭代的过程。然而,在迭代前,需要对HD(C^d2)的下界初始值进行确定。初值的确定方式如权利要求中所述一致,采用采样点的方式进行。由于折线Cl1中 包含2048条线段,因此,其包含的顶点个数为2049个。在这2049个顶点之中,选取固定数 目的采样点。在本实施例中,所选取的采样点数目为30。在这30个采样点中,其中两个为 折线Cl1的首端点和尾端点,其他的28个采样点采用均勻间隔的方式采取。对这30个采样 点,分别求得这30个采样点到折线屯的最近距离。在本实施例中,这30个采样点中到折 线d2最近距离中的最大者为403. 89毫米。因此,将403. 89毫米作为计算HDW1, d2)过程 中的迭代初始值。接下来,需要依次迭代Cl1上的2048条线段,对于其中的每条线段,首先确定该线 段是否为无效线段,如果为无效线段,则直接跳过。否则,才求得该线段到折线d2的单向 Hausdorff 距离。当处理到折线Cl1上第i条线段Si时,装置已经计算出由Sl,S2. . .,Si^1所形成的 部分折线到d2的单向Hausdorff距离HDg ((I1, d2),且有如下关系成立HDi-Jd1, d2) < HD (Cl1, d2)如果能在(12上找到合适的seg使得HD(Si,seg) < HDi^1 ((I1, d2),则就可以断定
14HD (si; d2) < HDi^1 ((I1, d2),即可以断定Si为一条无效线段,因此可以在计算过程中跳过Si, 直接处理si+1。在计算Cl1到d2单向Hausdorff距离过程中,模块装置中维护了线段seg,在 遍历线段Si的过程中,首先计算HD(Si,seg),如果小于HDp1 (屯,d2),则直接跳过对Si的处 理,否则再求得HD(Si,d2)。在本实施例中,由于所要计算的两条曲线来自车门模型的边缘, 因此实际上二者之间的形状基本相同,这样所离散化出的结果折线也相同,因此,实际上所 计算出的迭代初值就已经是HDdd2)的紧确下界,因此,在计算HD(Clpd2)的过程中,折线 Cl1和d2上的线段全部被排除,剪枝率都达到了 100%,大大节省了本模块装置的运行时间。 在对Cl1上所有线段迭代过后,我们得到HDW1, d2) = 403. 89,单位仍为毫米。第四步,采用折线到折线单向Hausdorff距离计算模块装置计算HD(Cl2^1)。该计 算过程与第三步中的过程类似,在此不再赘述。同样地,折线d2和Cl1上的剪枝率均达到了 100%。在处理完(12上的2048条线段后,计算出HD (d2,(I1) = 403. 89 (毫米)。第五步,在HDW1, d2)和HD(d2,(I1)中选出最大值作为H(c1; c2)的近似值。经过第三步和第四步的计算以及Hausdorff距离的定义,得H(Cl1,d2) = max (HD ((I1,d2),HD (d2,(I1)) = max (403. 89,403. 89) = 403. 89 (毫米)最终,将403. 89毫米作为H(ci; c2)的近似值。该近似值与H(ci; c2)真实值之间 的误差为2X10—6毫米,该近似误差足以满足一般的汽车设计需求。车主体所提供的安装槽间距为500毫米,大于本实施例中所计算出来的403. 89毫 米,因此,可以断定附图5所示车门边缘部分符合车体的要求。对于其他11对边缘曲线,可 以采用同样的方式依次计算Hausdorff距离,以确定整个车门的边缘是否有某一部分不符 合车体的要求。实施例2本实施例取自陶瓷产品设计实例。在进行陶瓷表面图案和纹理设计的过程中,对 陶瓷表面表面图案的设计依赖于图案与图案之间的Hausdorff距离。在进行陶瓷表面花纹 设计时,图案的放置位置对美观性有着非常重要的影响。如附图6所示为一个陶瓷圆盘。在 进行圆盘中央图案设计的过程中,需要对图示中的蝴蝶图案位置进行调整。蝴蝶图案置于 图示植物的两片叶子之间,然而其相对位置必须满足一定的比例要求。本实施例中,我们分 别提取三条Bezier曲线蝴蝶图案左边叶子边缘曲线C1,蝴蝶右边缘曲线c2,蝴蝶右边叶子 边缘曲线c3。附图4中的三组控制多边形分别为曲线C1、C2和C3的控制多边形。为了将蝴蝶图 案调整到合适的位置,需要计算曲线C1和曲线C2之间的Hausdorff距离H(c1; c2),还需要 计算曲线C2和曲线C3之间的Hausdorff距离H (c2, c3),再求得H (C1,C2)与H (c2,C3)之间的 比值。比值接近1 1的情况为对称情况,然而,对于陶瓷图案来说,对称并不能达到很好 的美观效果。本实施例中,对H(ci,c2)与H(C2,C3)的比值要求为0.3 0.618,即蝴蝶图案 的位置应该偏左,最左不超过两片叶子图案间距的三分之一处,最右不能超过黄金分割点。为了使得计算过程更加清晰,本实施例分以下几个步骤进行第一步,曲线的提取。使用扫描仪对图案进行扫描,从扫描的数据中选取采样点。 在附图6的左边叶子图案边缘选取20个采样点,在蝴蝶图案的右边缘选取25个采样点, 最后在右边叶子图案的左边缘选取30个采样点。分别进行拟合形成三条Bezier曲线Cl、 C2和(3,由于进行的图案设计是平面陶瓷上,因此,三条曲线均为平面曲线。三条曲线的控制多边形如附图6所示(自左至右)。曲线C1具有3个控制点,分别为(226.5,-264), (250. 5,-265. 5)和(267,-286. 5)。曲线C2禾口 C3均具有4个控制点。曲线C2的控制点分 别为(264,-249),(288,-241. 5),(306,-255)和(304. 5,-279),曲线 C3 的控制点分别为 (358. 5,-262. 5),(385. 5,-297),(393,-336)和(382. 5,-363),点坐标的单位均为毫米。第二步,采用离散化模块装置对曲线C1和C2进行离散化,并求得离散化后折线之 间的Hausdorff距离。以第一步中提取到的Bezier曲线C1和C2作为输入,采用离散化模块装置进行曲 线离散化,并以离散化的结果折线作为输出。为保证各条曲线离散化误差的一致性,误差按 如下方式设定首先指定一个标准误差为10_6毫米。对于曲线(^,求得其所有控制点的轴向 包围盒,计算包围盒的面积,用该面积乘以所设定的标准误差,将误差作为曲线C1的离散化 误差。对于曲线C2做同样的处理。将两个包围盒的面积分别与标准误差10_6毫米相乘,得到曲线C1的离散化误差为 9. 11X10_4毫米,曲线C2的离散化误差为1. 57X10_3毫米。采用附图2所示的离散化过程, 分别对曲线C1和曲线C2进行离散化,离散化结果分别为折线Cl1和折线d2,其中,折线Cl1和 d2均具有128条线段。以两条折线Cl1和d2作为输入。首先,在对折线Cl1的128条线段进行迭代前,需 要确定HD(C^d2)的初始下界值。在本实施例中,仍然是在折线Cl1的129个顶点中选取30 个采样点,采样点中包含Cl1的首尾两个顶点。其他28个顶点的选取为等间隔采取。在选 取30个采样点之后,分别求得这30个采样点到折线d2的最近距离,并取其中的最大者作 为HD(C^d2)的初始下界。经计算,这30个采样点到折线(12的最近距离中最大者为40. 38 毫米,因此,以40. 38毫米作为迭代前HDW1, d2)的初始下界。最终的HDW1, d2)不会低于 40. 38毫米。接下来,需要依次迭代Cl1上的128条线段,对于其中的每条线段,首先确定该线 段是否为无效线段,如果为无效线段,则直接跳过。否则,才求得该线段到折线d2的单向 Hausdorff 距离。当处理到折线Cl1上第i条线段Si时,装置已经计算出由Sl,S2. . .,Si^1所形成的 部分折线到d2的单向Hausdorff距离HDg ((I1, d2),且有如下关系成立HDi^1 (Cl1, d2) ^ HD (Cl1, d2)如果能在(12上找到合适的seg使得HD(Si,seg) < HDi^1 ((I1, d2),则就可以断定 HD (si; d2) < HDi^1 ((I1, d2),即可以断定Si为一条无效线段,因此可以在计算过程中跳过Si, 直接处理si+1。在计算Cl1到d2单向Hausdorff距离过程中,模块装置中维护了线段seg,在 遍历线段Si的过程中,首先计算HD(Si,seg),如果小于HDp1 (屯,d2),则直接跳过对Si的处 理,否则再求得HD (Si,d2)。在本实施例中,实际上通过采样点计算出的初始下界就已经是最终的单向 HausdorfT距离,因此,在两条折线上均有128条线段被剪枝。剪枝率都达到了 100%。最 后,在本实施例中,计算折线Cl1到d2单向Haudorff距离的输出为40. 38毫米。HD (d2, (I1)的过程过程与计算HDW1, d2)的过程类似,在此不再赘述。在本步骤的 计算过程中,两条折线上的128条线段也全部被剪枝,剪枝率达到了 100%。最终计算出来 的HD (d2,(I1) = 40. 38毫米。根据Hausdorff距离的定义,得
16
H(Cl1,d2) = max (HD ((I1,d2),HD (d2, (I1)) = max (40. 38,40. 38) = 40. 38 (毫米)第三步,采用Bezier曲线离散化模块对曲线(3进行离散化,得到折线d3,并计算
H(d2,d3) ο与第二步中相同,在10_6毫米的标准误差下计算离散化误差为3. 46X10_3毫米,在 此误差下将曲线C3离散成具有128条线段的折线d3。再对H(d2,d3)进行计算。计算过程 与第二步中计算过程类似,在此不再赘述。最终计算结果为H(d2,d3) = 114. 63,单位仍然 为毫米。第四步,进行距离比例计算。通过第二步和第三步的计算,已经得到H(C1,C2)的近 似值为40. 38毫米,H(c2,C3)的近似值为114. 63毫米。求得H(ci,c2)与H(c2,c3)的比值, 约为0. 352,该比值满足0. 3 0. 618的比值范围,因此,附图4所示的陶瓷图案中,蝴蝶图 案的位置可视为合理位置。实施例3为更好地说明本发明的实施过程,本实施例以一个建筑方面的实例来说明Bezier 曲线在实际工程中的应用。随着建筑设计和建造技术的发展,越来越多的异形建筑被构造 出来。附图7为一个异形建筑中的窗口结构示意图。该玻璃边缘和窗口边缘都属于不规则 曲线,在本实施例中,我们采用Bezier曲线进行表示。附图7中给出了玻璃边缘和窗口边缘 Bezier曲线的控制多边形,其中,线条较细的曲线多边形为玻璃边缘曲线的控制多边形,另 一线条较粗的曲线多边形为窗口边缘曲线的控制多边形。在进行这样的异形建筑设计中, 玻璃材料与窗口边缘的吻合性需要加以严格控制。与普通的方形或圆形窗口不同,这种异 形建筑中的吻合度控制需要一些特殊手段。本实施例中,我们计算玻璃边缘曲线与窗口边 缘曲线之间的Hausdorff距离,只有计算出来的距离小于阈值3毫米,才能说明所要安装的 玻璃与窗口之间的吻合度符合要求,如果计算出来的Hausdorff距离大于3毫米,则说明玻 璃的设计不符合当前窗口设计,因此,应该对玻璃的形状进行调整,以达到吻合度要求。本实施例分以下几个步骤进行第一步,从玻璃边缘和窗口边缘提取Bezier曲线,并将曲线离散化。首先采 用扫描仪扫描玻璃边缘和窗口边缘,在扫描得到的数据中选取采样点。在玻璃边缘采 取200个采样点,通过拟合的方式形成Bezier曲线C1,类似地,在窗口边缘采取300个 采样点,通过拟合的方式形成Bezier曲线c2。其中C1具有10个控制点,依次为(_6, 14,-24),(212. 5,237. 5,-242. 5),(545,255,-575),(650,-375,-680),(495,-775,-525), (72. 5,-1190. 5,-102. 5),(-165,-1395,135),(-470. 5,-1540. 5,440. 5),(-760,-1550, 730),(-1120. 5,-1165. 5,1090. 5),C2 具有 11 个控制点依次为(-8,17,-22),(160, 178,-190),(387. 5,251. 5,-417. 5),(559,31,-589),(580,-403,-610),(482,-774,-512), (251,-1257,-281),(-403. 5,-1659. 5,373. 5),(-764,-1558,734),(-848,-1397,818)和 (-1124. 5,-1162. 5,1094. 5),以上点坐标的单位均为毫米。第二步,采用Bezier曲线离散化模块对曲线C1和C2进行离散化。离散化的误差 设置与实施例中类似,在本实施例中,为了使两条曲线的离散误差具有一致性,首先设定一 个标准误差为10_9毫米,再用两条曲线的包围盒体积乘以标准误差,从而得到曲线各自的 离散误差。分别计算曲线(^和C2两曲线控制点的轴向包围盒体积,用体积乘以设定的标准 误差,得到曲线C1的离散化误差为0. 0010毫米,曲线C2的离散化误差为0. 0011毫米,这两
17个误差足以满足实际中的实际需求。如附图2过程所示。分别在这两个误差下进行曲线的 离散化,将C1和C2分别离散化为折线Cl1和d2,其中Cl1包含1646条线段,d2包含1594条线 段。第三步,使用折线到折线单向Hausdorff距离模块装置计算折线(I1到折线d2的单 向 Hausdorff 距离。在本步骤中,折线到折线单向Hausdorff距离模块装置的输入为步骤2中所产生 的两条折线Cl1和d2。计算折线Cl1到折线d2的单向Hausdorff距离HDW1, d2)的过程是对 Cl1上各个线段进行迭代的过程。在迭代前需要确定迭代初值。折线Cl1中包含1647个顶点,在本实施例中,在这1647个顶点中选取30个采样点, 这30个采样点中包含首尾两个顶点。其他28个采样点从其他顶点中等间隔选取。分别求 这30个采样点到折线d2的距离,在30个距离中选取最大者,经计算,这30个距离中最大 者为6. 39毫米,因此,将6. 39毫米作为迭代的初始值。接下来,需要依次迭代Cl1上的1646条线段,对于其中的每条线段,首先确定该线 段是否为无效线段,如果为无效线段,则直接跳过。否则,才求得该线段到折线d2的单向 Hausdorff距离。处理到折线(I1上第i条线段Si时,装置已经计算出由S1, s2. . .,Si^1所形 成的部分折线到d2的单向Hausdorff距离HDp1 (屯,d2),处理到折线(I1上第i条线段Si时, 装置已经计算出由S1, S2. . .,Si^1所形成的部分折线到d2的单向Hausdorff距离HD^ ((I1, d2),如果能在(12上找到合适的seg使得HD(Si,seg) < HDi^1 ((I1, d2),则就可以断定HD (Si, d2) < HDi^1 ((I1, d2),即可以断定Si为一条无效线段,因此可以在计算过程中跳过Si,直接处 理si+1。在计算Cl1到d2单向Hausdorff距离过程中,模块装置中维护了线段seg,表示d2上 距离Si较近的一条线段,在遍历线段Si的过程中,首先计算HD (si; seg),如果小于HDh (屯, d2),则直接跳过对Si的处理,否则再求得HD (Si, d2)。此外,在计算Cl1上某条线段s到折线d2的单向Hausdorff距离的过程中,并不是 d2上所有线段都参与了平分线计算,设、和bj是d2上两条不同的线段,如果有以下不等式 成立MD (s, bj) > HD(s, bj)则可断定bj不能产生HD(s,d2),因此可以将bj排除。其中MD(s,b」)定义如下MD(S> bJ ) = (P, bj )在处理到Cl1上的线段s时,装置中维护了 d2上的一个线段seg,该线段与s的距 离足够近,我们将该线段作为bi;来对所处理的线段…进行排除。根据此依据,利用当前装置中所维护的seg,可以在两条折线上对无效线段进行排 除。在本实施例中,经统计,两条折线Cl1和d2上被剪枝的线段多达1598和1579,剪枝率分 别高达97. 0%和99. 1 %,最终所计算出的距离为6. 43毫米。第四步,与第三步同理,采用同样的方法和剪枝策略,以折线(12和Cl1作为输入,再 使用折线到折线单向Hausdorff距离计算模块与装置计算HD (d2,(I1),最终的计算结果为 6. 43毫米。在计算过程中,折线d2和折线Cl1上分别有1525和1633条线段被剪枝,剪枝率 分别达到了 95. 6%和99. 2%。第五步,在HDW1, d2)和HD(d2,(I1)中选出最大值作为H(c1; c2)的近似值。经过第三步和第四步的计算以及Hausdorff距离的定义,得
18
H(Cl1,d2) = max (HD ((I1,d2),HD (d2, (I1)) = max (6. 43,6. 43) = 6. 43 (毫米)最终,将6. 43毫米作为H(Cl,c2)的近似值。该近似值与H(c1; c2)真实值之间的 误差为两个离散误差之和。在本实施例中,所计算出来的6. 43毫米大于设计中的阈值3毫 米,这说明玻璃的形状设计与窗口形状不符,因此,需要重新设计玻璃的形状,调整玻璃的 边缘设计,以满足小于3毫米阈值的要求。
权利要求
一种求得Bezier曲线之间Hausdorff距离近似值的方法,其特征在于所述方法包括获取要进行计算的两条Bezier曲线选取固定数目的采样点,对采样点进行拟合,得到相应的Bezier曲线,Bezier曲线的定义公式如下 <mrow><mi>c</mi><mrow> <mo>(</mo> <mi>u</mi> <mo>)</mo></mrow><mo>=</mo><munderover> <mi>&Sigma;</mi> <mrow><mi>i</mi><mo>=</mo><mn>0</mn> </mrow> <mi>n</mi></munderover><msub> <mi>B</mi> <mrow><mi>i</mi><mo>,</mo><mi>n</mi> </mrow></msub><mrow> <mo>(</mo> <mi>u</mi> <mo>)</mo></mrow><msub> <mi>P</mi> <mi>i</mi></msub> </mrow>其中,u表示Bezier曲线的参数,范围为
,Bi,n(u)为Bernstein基函数,Pi为控制顶点,对于给定的n,Bezier曲线c(u)共有n+1个控制点;通过相应装置将输入的Bezier曲线c1和c2进行离散化,分别得到折线d1和d2,基于线段集合Voronoi图的性质以及Hausdorff距离的性质,采用剪枝策略计算折线d1到d2的单向Hausdorff距离HD(d1,d2)以及d2到d1的单向Hausdorff距离HD(d2,d1);取HD(d1,d2)和HD(d2,d1)中的最大者作为c1和c2之间Hausdorff距离的近似值,该近似值与H(c1,c2)之间的误差可以通过离散化方法进行控制,在计算完毕之后,将计算的距离通过装置输出。
2.如权利要求1所述的方法,其特征在于将所述输入Bezier曲线c采用误差可控的 离散化方法离散成一条折线d,通过指定误差e,输出的折线d与原曲线c之间的Hausdorff 距离小于e ;所述装置以一条Bezier曲线c以及离散的误差e作为输入,对于曲线c,连接其起点和 终点,得到线段L,假设c的控制点有n+1个,分别为Ptl,P1, P2,...,Pn,依次计算各个控制点 到L的距离并取最大如下dis = max Ci(PjfL)如果dis >e,则说明某一控制点到L的距离超过了 e,在这种情况下,在范围(0,1)内 选取一参数t,将曲线c在该参数t的位置进行分割,得到两条子曲线,通常情况下取t = 0.5 ;对于两条子曲线,分别再连接其首尾端点,形成线段L1和线段L2,并继续检查子曲线与 对应线段之间的误差是否满足给定的e,如果满足,则整条曲线c由折线d所近似,其中,d 由两段首尾相连的线段L1和L2组成;如果两条子曲线中任何一条不满足误差条件,则递归 地再从区间(0,1)中选取某个参数,在该参数处对子曲线进行分割,直到满足误差条件为 止;一般地,如果曲线c由折线d所近似,折线d中包含m段直线段,则每条直线段Si (i = 1,. . .,m)都与曲线c的一段子曲线Ci所对应;直线段Si与子曲线Ci之间的Hausdorff距 离小于给定的误差e,则根据Hausdorff距离的定义,曲线c与折线d之间的Hausdorff距 离同样也小于输入的误差e ;当每一段子曲线Ci与对应的直线段Si之间的关系都满足输入 误差e之后,所述装置将当前所得到的折线d输出。
3.如权利要求1和权利要求2所述的方法,其特征在于给定两条Bezier曲线C1和 C2,分别在误差ei和e2下将曲线用折线Cl1和d2近似,并计算Cl1和d2之间Hausdorff距离, 记为H((I1, d2),则可在满足误差ei+e2的条件下用H((I1, d2)作为C1和C2之间Hausdorff距 离的近似值。
4.如权利要求1和2所述,其特征在于将两条输入曲线分别采用折线Cl1和d2近似, 将折线Cl1和d2作为本装置的输入,求得H(d1, d2);求得两个单向Hausdorff距离HDW1, d2)和HD (d2,(I1),根据Hausdorff距离定义, H (Cl1,d2) = max (HD ((I1,d2),HD (d2, Cl1)) 最终将HW1, d2)作为本装置的输出。
5.如权利要求4所述方法,其特征在于=H(C^d2)的求解分为两个步骤计算HDdd2) 和计算HD (d2,(I1),HD (d2,(I1)的计算方法与HD ((I1, d2)的计算方法类似,具体方法如下折线Cl1共有m条线段,分别为Sl,S2,... , Sm,根据Hausdorff距离的性质, HDid1 ,d2) = max HDisi,d2)/=l,...,w对于折线Cl1,从其一端开始,依次处理其上的每条线段,当处理到第i条线段Si时,装 置已经计算出由S1, S2. . .,Si^1所形成的部分折线到d2的单向Hausdorff距离HD^ (屯,d2), 求得HD(Si,d2),并与HDiJd1, d2)进行比较,最终叫风,d2)的取值与比较结果相关; HDi (Cl1,d2) = max (HDi^1 ((I1, d2),HD (Si,d2))当处理完最后一条线段sm后,得到的当前单向Hausdorff距离HDm(屯,d2)即可作为装 置的输出。
6.如权利要求5所述方法,其特征在于对折线Cl1上的每条线段Si,都需要计算HD(Si, d2),根据Hausdorff距离的下界性质对折线(I1上的线段进行排除,以提运行速度;对于折线Cl1,从其一端开始,依次处理其上的每条线段,当处理到第i条线段Si时,装 置已计算出由S1, S2. . .,Si^1所形成的部分折线到d2的单向Hausdorff距离HD^ ((I1, d2), 根据Hausdorff距离的性质,判定不等式关系是否成立 HDi^1 ((I1, d2) ( HD ((I1, d2)因此,已经求得的距离HDp1(C^d2)是HD (Clpd2)的一个当前下界,如果HD(Si,d2)低于 这个下界,则Si就是折线Cl1上的一条无效线段;假设seg是d2上任意一条线段,根据HausdorfT距离的性质,判定如下不等式关系是 否成立HD (si; d2) ( HD (si; seg)如果能在(12上找到合适的seg使得HD (Si,seg) < HDi^1 ((I1, d2),则就可以断定HD (Si, d2) < HDi^1 ((I1, d2),即可以断定Si为一条无效线段,因此可以在计算过程中跳过Si,直接处理 si+1 ;根据之前的表述,如果能找到d2上的某个线段seg,使得HD (Si, seg)足够小,则将Si排 除在计算过程之外;可以借助HDH(C^d2)的计算过程找到一个seg,使得HD (Si,seg)足够考察对Cl1的遍历过程,在处理Si之前,已经刚刚处理过线段Sp1,首先假设Sg不是一条 无效线段,则HDGh,d2)已经被计算,在计算HDGh,d2)的过程中,不仅该单向Hausdorff 距离被计算出来,d2上距离Sp1最近的线段也可以得出,由于Si与Sp1之间的连续性,距离 Si^1最近的线段距离Si也足够近,将计算HD (S^d2)过程中所得出的最近线段记作seg,然 后计算HD (Si,seg)并将HD (Si,seg)与HDp1 (屯,d2)比较以确定是否需要将Si排除在计算 范围之外;以上的过程建立在一个假设之上,即Sp1是一条有效线段;如果Sg是一条无效线段, 则无法找出对应的seg以进行排除Si的工作,此时,需要维护一个计数器SkipCoimter,该 计数器表明在迭代折线Cl1的过程中,Cl1上有多少条连续的直线段被跳过,即连续出现了多少个无效线段;在处理线段Si时,如果计数器SkipCoimter不为零,则说明当前装置中所维 护的seg已经失效,不再距离^足够近,需要进行调整;本装置中对其调整策略如下从seg 位于d2上的位置开始,在d2上向前和向后各遍历SkipCoimter条线段,在这些线段中找出 距离Si中点最近的一个作为新的seg。
7.如权利要求6所述的方法,其特征在于在计算HDW1,d2)的过程中对折线Cl1上的 无效线段进行排除,在进行HDW1, d2)的计算前确定HDW1, d2)的下界初始值,以便在计算 HD(C^d2)的过程中将更多的无效线段排除;通过在Cl1上选取采样点的方式获得一个初始值作为HDW1, d2)的初始下界,这样仍然 可能将折线Cl1的第一条线段以及其后的多条线段排除,提高装置的运行速度;选取采样点确定初值的方法如下假设折线Cl1由!11-1条线段组成,则屯上有m个顶点, 在这m个顶点中选取M个顶点,且要求这M个顶点中必须包含折线Cl1的首尾两个端点;对 于所取到的这些采样点,分别求得其中每个点到d2的最近距离,假设这些点分别为Q1, Q2, Q3· · · Qm'则 根据Hausdorff距离定义,所求得的InitialDis仍然是HD (屯,d2)的一个下界,可以将 该下界作为迭代Cl1之前的初始下界。
8.如权利要求5所述的方法,其特征在于在求得折线Cl1到折线d2单向Hausdorff距 离过程中计算Cl1上某条线段s到折线d2的单向Hausdorff距离,所述装置的输入为一线段 s和一折线d2,输出为HD(s,d2);考虑线段s,并将折线d2看作线段集合,该集合中包含η条线段,从d2的一端开始依次 处理其中的每条线段bi;其中i = 1,...,n;当装置处理到线段h的时候,线段Ivb2...!^ 已经被处理完毕;装置中始终维护两个结构第一个结构为一个线性表Ph,该表依次保存 了线段集合Ibpb2,. . .,IvJ所形成的Voronoi图与s的交点将线段s所分割成的子线段, 这些子线段是从s的某一端开始顺次保存,且每个子线段对应且仅对应集合Ib1, b2,..., b^}中的唯一一条线段;第二个结构为一个映射Ri^Pi-r〉Ib1, b2,...,IvJ,该映射表 明,如果某个子线段ss属于线性表Pp1,那么必然可以通过映射Rp1找到集合Ib1, b2,..., IvJ中与之对应的线段b,而且能保证ss到集合Ib1, b2,. . .,IvJ的单向Hausdorff距离 只可能产生在线段b上,而不会产生在集合Ib1, b2,. . .,IvJ中的其他线段上;对于当前正在处理的线段bi;依次检查P"中的每条子线段ss,通过映射Rp1找到与之 对应的线段b。ld,求得h与b。ld的平分线将ss所分割成的子线段集合S。对于S中的每条 线段sub,确定其到h与b-之间的最近距离;如果d(sub,b。ld) < Cl(SUb^i)成立,就将映 射sub- > b。ld加入新的映射Ri,否则将sub- > h加入映射Ri ;当对d2中的每条线段h做以上方式的处理之后,最终得到一个线性表Pn和映射Rn, 根据以上方法,Pn中所存放的即为线段集合Ib1, b2,b3,. . .,bj形成的Voronoi图将线段 s分割成的子线段,映射Rn中存放着子线段集合Pn到Ib1, b2,...,bn}的一个映射;对于Pn 中的每个子线段SS,通过映射Rn可找出集合Ibplvb3,...,bn}中与之对应的线段b,使得 HD (ss, d2)只可能产生在线段b上,则根据Hausdorff距离的定义可通过如下公式求得折 线Cl1到折线d2的单向Hausdorff距离如下即求得Pn中的每条子线段SS到对应线段b的单向Hausdorff距离,并取所有距离中 的最大者作为HD (s,d2),最后将HD (s,d2)作为所述装置的输出。
9.如权利要求8所述的方法,其特征在于在求得线段s到折线d2的单向Hausdorff 距离HD(s,d2)的过程中,折线d2上的每条线段都参与了计算;可将d2上不产生距离HD(s, d2)的线段进行部分排除设h和bj是d2上两条不同的线段,如果有以下不等式成立MD (s,bj) > HD (s, bj)则可断定bj不能产生HD (s,d2),因此可以将bj排除;其中MD (s,bj)定义如下MD(S^1) = Wind(P^l)J PesegJ其中MD表示s到bj的最近距离;对于给定的s,在求得HD (s, d2)过程中,处理到d2上 线段8」的时候,如果找到另一条线段满足关系MD(s,bp >皿(8,1^),就可以将1^排除; 在处理到Cl1上的线段s时,所述装置中维护了 d2上的一个线段,该线段与s的距离足够近, 将该线段作为bi;来对所处理的线段bj进行排除,以提高所述装置的运行速度。
10.一种计算Bezier曲线之间Hausdorff距离近似值的装置,其特征在于将输入的 两条Bezier曲线C1和C2进行离散化,根据两条曲线的离散化误差^和e2,分别得到折线 Cl1和d2,计算折线Cl1到d2的单向Hausdorff距离HD W1,d2)以及d2到(I1的单向Hausdorff 距离HD(d2,(I1),最后,从HD(屯,d2)和HD(d2,(I1)中选择最大的一个作为H(Cl,c2)的近似 值,即作为本装置的输出,由以下模块组成Bezier曲线离散化模块以Bezier曲线c和离散化误差e为输入,以一条折线d为输 出,输出的折线d即为曲线c的离散化结果,并满足d和c之间的Hausdorff距离H(c,d) < e。Bezier曲线的获得可从实体模型中进行提取,折线与折线之间Hausdorff距离计算模块以两条折线(I1和d2作为输入,以折线(I1到 折线d2之间的Hausdorff距离Hdd2)作为输出;折线的输入则来自于曲线离散化模块的 输出。对于从辅助设计模型等应用中获取的两条Bezier曲线C1和C2,可通过曲线离散化 模块分别将曲线离散化为两条折线作为本模块装置的输入;线段到折线单向Hausdorff距离剪枝模块线段s和折线d2作为输入,以线段s到折 线d2的单向Hausdorff距离HD (s,d2)作为输出。
全文摘要
本发明公开了一种计算Bezier曲线之间Hausdorff距离近似值的方法和装置所述方法包括采用递归分割的方法将两条输入Bezier曲线c1和c2进行离散化,离散化的结果为两条折线,离散化的误差可控;基于线段集Voronoi图的性质和Hausdorff距离的性质,采用一种剪枝策略计算两条折线的单向Hausdorff距离,并作为Bezier曲线c1和c2之间Hausdorff距离的近似值。所述装置包括Bezier曲线离散化模块,线段到折线单向Hausdorff距离剪枝模块,折线到折线单向Hausdorff距离剪枝模块。本发明具有易于实现,近似误差可控,计算速度快的效果。
文档编号G06F17/50GK101916310SQ20101024612
公开日2010年12月15日 申请日期2010年8月5日 优先权日2010年8月5日
发明者古和今, 吴文峰, 熊金泉, 白彦冰, 雍俊海, 黄朝 申请人:江西省科学院能源研究所;清华大学;江西长城网络有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1