发明内容
本发明正是基于上述技术问题,提出了一种新的技术方案,通过读取待剖分字形的字形轮廓,利用改进的Delaunay算法对字形进行三角剖分,并结合贪心算法对剖分得到的三角形进行合并的方式,不仅可以达到最大凸剖分的目的,而且还解决了二维字形中存在孔的字形剖分问题和部分区域未剖分的问题,使得进一步的字形处理变得更加方便,有效地提高了字形剖分的质量。
有鉴于此,根据本发明的第一方面,提出了一种字形剖分方法,包括:获取待剖分字形中的字形轮廓,以确定其内轮廓和外轮廓;确定与每个内轮廓对应的外轮廓,以根据每对对应的内轮廓和外轮廓得到所述待剖分字形的至少一个连通区域;按照预设Delaunay算法对所述至少一个连通区域中的每个连通区域进行三角剖分,得到至少一个预设Delaunay三角形;按照预设贪心算法对所述至少一个预设Delaunay三角形进行合并,得到所述待剖分字形的至少一个凸多边形。
在该技术方案中,当获取到待剖分字形中的每一个内轮廓以及与其对应的外轮廓后,其中,待剖分字形的内轮廓呈顺时针方向,外轮廓呈逆时针方向,可以根据每对对应的内轮廓和外轮廓得到该待剖分字形的一个或多个连通区域,进而通过对每一个连通区域应用预设Delaunay算法(即改进的Delaunay算法)进行三角剖分,然后对得到的一个或多个预设Delaunay三角形应用预设贪心算法进行合并,以将该待剖分字形剖分为至少一个凸多边形,达到最大凸剖分的目的的同时,可以解决二维字形中存在孔(即空白区域)不利于字形剖分的问题和字形的部分区域无法剖分的问题,使得进一步的字形处理变得更加方便,有效地提高了字形剖分的质量。
在上述技术方案中,优选地,所述确定与每个内轮廓对应的外轮廓,以根据每对对应的内轮廓和外轮廓得到所述待剖分字形的至少一个连通区域的步骤,包括:获取所述每个内轮廓上的任一字形轮廓点到所有外轮廓中的每个外轮廓的最小距离;将至少一个所述最小距离中的最小值对应的外轮廓确定为与所述每个内轮廓对应的外轮廓;将所述每个内轮廓上的字形轮廓点和与其对应的外轮廓上的字形轮廓点合并,得到所述至少一个连通区域。
在该技术方案中,基于内轮廓上的字形轮廓点与对应包含在其外轮廓上的字形轮廓点的距离最近的规律,可以针对每个内轮廓计算其上的任一字形轮廓点到各外轮廓上的所有字形轮廓点的距离,首先通过比较确定每个内轮廓到各外轮廓各自的最小距离,进而将各最小距离中距离值最小的对应的外轮廓确定为当前内轮廓的外轮廓,通过该处理方式可以确定对应于每个内轮廓的外轮廓,然后将对应的内轮廓和外轮廓上的字形轮廓点进行合并,则每一个外轮廓与其包含的所有内轮廓构成了一个连通区域,进而可以用于进行三角剖分和贪心合并,达到最大凸剖分的目的。
在上述任一技术方案中,优选地,所述按照预设Delaunay算法对所述至少一个连通区域中的每个连通区域进行三角剖分,得到至少一个预设Delaunay三角形的步骤,包括:判断所述每个连通区域的轮廓上的其他字形轮廓点是否能与当前有向边形成预设Delaunay三角形,所述其他字形轮廓点为所述每个连通区域的轮廓上除所述当前有向边的端点外的任一字形轮廓点,所述当前有向边为所述每个连通区域的全部有向边形成的当前数组中的有向边;当判定所述其他字形轮廓点能与所述当前有向边形成所述预设Delaunay三角形时,保留当前形成的所述预设Delaunay三角形,并将所述当前有向边自所述当前数组中删除,否则将所述当前有向边保存至临时数组中,直至所述当前数组中有向边个数减为0;对所述临时数组中的每条有向边进行能否与所述每个连通区域的轮廓上剩余的字形轮廓点形成所述预设Delaunay三角形的判断,直至完成对所述全部有向边的处理,以得到所述至少一个预设Delaunay三角形。
在该技术方案中,对每个连通区域按照预设Delaunay算法进行三角剖分时,以连通区域中的每一条有向边为单位进行剖分,当连通区域的轮廓上除有向边的端点对应的字形轮廓点外的其他任一字形轮廓点能与该有向边形成预设Delaunay三角形(即有效的Delaunay三角形)时,即成功进行了一次三角剖分,即可以保留该预设Delaunay三角形,并将该当前有向边自其所在的有向边数组(即当前数组)中删除,否则若无法形成预设Delaunay三角形,即将其暂时存储到临时数组中,待对当前数组中有向边处理完成后再对临时数组中的有向边进行相应的处理,以完成对每个连通区域的三角剖分,从而确保在贪心合并为凸多边形后,达到字形的最大凸剖分。
在上述任一技术方案中,优选地,所述按照预设贪心算法对所述至少一个预设Delaunay三角形进行合并,得到所述待剖分字形的至少一个凸多边形的步骤,包括:当所述至少一个预设Delaunay三角形为一个时,对所述待剖分字形的剖分完成;当所述至少一个预设Delaunay三角形为多个时,对由多个预设Delaunay三角形组成的多个多边形,判断剩余多边形中是否存在与当前多边形存在公共边、且与所述当前多边形在所述公共边的两端点处合并得到的角度为凸角的目标多边形,其中所述剩余多边形为所述多个多边形中除所述当前多边形外的其他多边形;
若存在所述目标多边形,判断所述目标多边形是否与所述当前多边形存在包含关系;若存在包含关系,且所述当前多边形包含所述目标多边形,则删除所述目标多边形,对所述多个多边形中除所述目标多边形外的其他多边形按照所述预设贪心算法进行合并,否则判断所述当前多边形与其他目标多边形的包含关系;若不存在包含关系,将所述目标多边形存储至候选多边形数组中,获取所述候选多边形数组中与所述当前多边形具有最长公共边的待合并多边形;将所述当前多边形与所述待合并多边形进行合并,并将合并后的多边形作为新的当前多边形,以继续对删除所述待合并多边形的所述剩余多边形和所述新的当前多边形按照所述预设贪心算法进行合并,直至完成对所述多个多边形的合并处理;
若不存在所述目标多边形,将所述当前多边形保存至凸多边形数组中,并继续对所述剩余多边形中的多边形按照所述预设贪心算法进行合并,直至完成对所述多个多边形的合并处理。
在该技术方案中,当对经三角剖分得到的预设Delaunay三角形按照预设贪心算法进行合并时,若仅有一个预设Delaunay三角形则无需进行合并,说明对待剖分字形的剖分已完成,可以直接应用于后期的模式识别、图形动画、计算机辅助设计等,具有良好的适应性。
而若有多个预设Delaunay三角形时则需要判断是否能够进行合并,由于三角形也属于多边形,则对于经过三角剖分后得到的多个多边形,首先对其中的一个多边形判断在除该当前多边形外的剩余多边形中是否存在能与其进行合并的目标多边形,即与该当前多边形具有公共边,且两多边形合并后的角度为凸角,若存在则将其存放至候选多边形组中,进而在候选多边形组中选择与该当前多边形不存在包含关系且具有最长公共边的多边形进行合并,并将合并后的多边形置于最初的多边形组中重复上述处理过程,若存在有包含关系的多边形,以及若是当前多边形包含目标多边形,则将目标多边形删除后对最初的多边形组中剩余的多边形重复上述处理过程,直至将最初的多边形组中不包含任何多边形,即将合并后且无法继续合并的多边形均存放至凸多边形数组中为止,而若为目标多边形包含当前多边形,则将该当前多边形与其他目标多边形进行包含关系的判断,进而根据包含关系的判断结果执行相应的操作,从而确保对待剖分字形的最大凸剖分。
在上述任一技术方案中,优选地,所述将所述当前多边形与所述待合并多边形进行合并的步骤,还包括:判断所述最长公共边分别在所述当前多边形中的方向和所述待合并多边形中的方向是否一致;若相反,将所述当前多边形和所述待合并多边形直接合并,若一致,将所述待合并多边形的方向取反后与所述当前多边形进行合并。
在该技术方案中,对两多边形(当前多边形和待合并多边形)进行贪心合并时需要考虑两多边形的方向,从而确保合并后的多边形的方向统一,即均为顺时针方向或逆时针方向,具体地,若两多边形的公共边在各自多边形中的方向相反,则说明两多边形可以直接合并,否则需要对其中的一个多边形的方向进行取反后才能进行多边形的合并,比如将待合并多边形的方向取反,当然也可以将当前多边形的方向取反,如此,通过判断两多边形的公共边的方向是否统一可以很方便的调整并确定合并后的多边形的方向,保证合并后的多边形轮廓边的方向统一。
在上述任一技术方案中,优选地,在所述预设Delaunay三角形中,所述其他字形轮廓点位于所述当前有向边的左侧,所述其他字形轮廓点与所述当前有向边的两端点相连形成的两条边不经过所述待剖分字形的空白区域、且不与所述每个连通区域中的其他有向边相交,以及所述预设Delaunay三角形不包含所述待剖分字形中的空白区域,所述预设Delaunay三角形的外接圆面积最小。
在该技术方案中,经改进的Delaunay算法(即预设Delaunay算法)对待剖分字形的连通区域进行三角剖分得到的预设Delaunay三角形在满足如下条件时才是有效的Delaunay三角形,具体地,与当前有向边构成预设Delaunay三角形的任一其他字形轮廓点应位于该当前有向边的左侧,且其他字形轮廓点与该当前有向边的两端点分别相连后形成的两条边不经过待剖分字形的空白区域,以避免对空白区域进行剖分影响字形剖分最终剖分结果的准确性,而且该两条边不与其当前所在的连通区域中的其他有向边相交,以确保剖分得到的预设Delaunay三角形的准确性,而且该有效的Delaunay三角形(即预设Delaunay三角形)不应包含待剖分字形中的空白区域,且其外接圆面积最小,以助于解决二维字形中存在孔的字形剖分问题和部分区域未剖分的问题,使得进一步的字形处理变得更加方便,从而提高字形剖分的质量。
在上述任一技术方案中,优选地,所述获取待剖分字形中的字形轮廓,以确定其内轮廓和外轮廓的步骤,包括:获取各所述字形轮廓中包含的字形轮廓点,以计算所述各字形轮廓的矢量面积;若当前字形轮廓的矢量面积为正,则确定所述当前字形轮廓为所述待剖分字形的内轮廓,否则,确定所述当前字形轮廓为所述待剖分字形的外轮廓。
在该技术方案中,可以通过计算待剖分字形中的各字形轮廓的矢量面积的方式区分其各自为内轮廓还是外轮廓,具体地,根据各字形轮廓上的字形轮廓点计算其矢量面积,即由对该字形轮廓上的任一字形轮廓点依次与该字形轮廓上每相邻的两个字形轮廓点连线构成的三角形加和得到每个字形轮廓的矢量面积,进一步地,在左手坐标系(即屏幕坐标系,坐标原点在屏幕左上角)下,若计算得到的字形轮廓的矢量面积为正则该字形轮廓为待剖分字形的内轮廓,相反地,若计算得到的字形轮廓的矢量面积为负则该字形轮廓为待剖分字形的外轮廓。
根据本发明的第二方面,提出了一种字形剖分装置,包括:获取模块,用于获取待剖分字形中的字形轮廓,以确定其内轮廓和外轮廓;确定模块,用于确定与所述每个内轮廓对应的外轮廓,以根据每对对应的内轮廓和外轮廓得到所述待剖分字形的至少一个连通区域;剖分模块,用于按照预设Delaunay算法对所述确定模块得到的所述至少一个连通区域中的每个连通区域进行三角剖分,得到至少一个预设Delaunay三角形;合并模块,用于按照预设贪心算法对所述剖分模块得到的所述至少一个预设Delaunay三角形进行合并,得到所述待剖分字形的至少一个凸多边形。
在该技术方案中,当获取到待剖分字形中的每一个内轮廓以及与其对应的外轮廓后,其中,待剖分字形的内轮廓呈顺时针方向,外轮廓呈逆时针方向,可以根据每对对应的内轮廓和外轮廓得到该待剖分字形的一个或多个连通区域,进而通过对每一个连通区域应用预设Delaunay算法(即改进的Delaunay算法)进行三角剖分,然后对得到的一个或多个预设Delaunay三角形应用预设贪心算法进行合并,以将该待剖分字形剖分为至少一个凸多边形,达到最大凸剖分的目的的同时,可以解决二维字形中存在孔(即空白区域)不利于字形剖分的问题和字形的部分区域无法剖分的问题,使得进一步的字形处理变得更加方便,有效地提高了字形剖分的质量。
在上述技术方案中,优选地,所述确定模块包括:第一获取子模块,用于获取所述每个内轮廓上的任一字形轮廓点到所有外轮廓中的每个外轮廓的最小距离;第一确定子模块,用于将所述第一获取子模块获取的至少一个所述最小距离中的最小值对应的外轮廓确定为与所述每个内轮廓对应的外轮廓;合并子模块,用于将所述每个内轮廓上的字形轮廓点和所述第一确定子模块确定的与其对应的外轮廓上的字形轮廓点合并,得到所述至少一个连通区域。
在该技术方案中,基于内轮廓上的字形轮廓点与对应包含在其外轮廓上的字形轮廓点的距离最近的规律,可以针对每个内轮廓计算其上的任一字形轮廓点到各外轮廓上的所有字形轮廓点的距离,首先通过比较确定每个内轮廓到各外轮廓各自的最小距离,进而将各最小距离中距离值最小的对应的外轮廓确定为当前内轮廓的外轮廓,通过该处理方式可以确定对应于每个内轮廓的外轮廓,然后将对应的内轮廓和外轮廓上的字形轮廓点进行合并,则每一个外轮廓与其包含的所有内轮廓构成了一个连通区域,进而可以用于进行三角剖分和贪心合并,达到最大凸剖分的目的。
在上述任一技术方案中,优选地,所述剖分模块包括:第一判断子模块,用于判断所述每个连通区域的轮廓上的其他字形轮廓点是否能与当前有向边形成预设Delaunay三角形,所述其他字形轮廓点为所述每个连通区域的轮廓上除所述当前有向边的端点外的任一字形轮廓点,所述当前有向边为所述每个连通区域的全部有向边形成的当前数组中的有向边;第一处理子模块,用于当判定所述其他字形轮廓点能与所述当前有向边形成所述预设Delaunay三角形时,保留当前形成的所述预设Delaunay三角形,并将所述当前有向边自所述当前数组中删除,否则将所述当前有向边保存至临时数组中,直至所述当前数组中有向边个数减为0;调度子模块,用于调度所述第一判断子模块对所述临时数组中的每条有向边进行能否与所述每个连通区域的轮廓上剩余的字形轮廓点形成所述预设Delaunay三角形的判断,直至完成对所述全部有向边的处理,以得到所述至少一个预设Delaunay三角形。
在该技术方案中,对每个连通区域按照预设Delaunay算法进行三角剖分时,以连通区域中的每一条有向边为单位进行剖分,当连通区域的轮廓上除有向边的端点对应的字形轮廓点外的其他任一字形轮廓点能与该有向边形成预设Delaunay三角形(即有效的Delaunay三角形)时,即成功进行了一次三角剖分,即可以保留该预设Delaunay三角形,并将该当前有向边自其所在的有向边数组(即当前数组)中删除,否则若无法形成预设Delaunay三角形,即将其暂时存储到临时数组中,待对当前数组中有向边处理完成后再对临时数组中的有向边进行相应的处理,以完成对每个连通区域的三角剖分,从而确保在贪心合并为凸多边形后,达到字形的最大凸剖分。
在上述任一技术方案中,优选地,当所述至少一个预设Delaunay三角形为一个时,对所述待剖分字形的剖分完成;当所述至少一个预设Delaunay三角形为多个时,所述合并模块包括:第二判断子模块,用于对由多个预设Delaunay三角形组成的多个多边形,判断剩余多边形中是否存在与当前多边形存在公共边、且与所述当前多边形在所述公共边的两端点处合并得到的角度为凸角的目标多边形,其中所述剩余多边形为所述多个多边形中除所述当前多边形外的其他多边形;第三判断子模块,用于若所述第二判断子模块判定存在所述目标多边形,判断所述目标多边形是否与所述当前多边形存在包含关系;第二处理子模块,用于若所述第三判断子模块判定存在包含关系,且所述当前多边形包含所述目标多边形,则删除所述目标多边形,对所述多个多边形中除所述目标多边形外的其他多边形按照所述预设贪心算法进行合并,否则判断所述当前多边形与其他目标多边形的包含关系;第二获取子模块,用于若所述第三判断子模块判定不存在包含关系,将所述目标多边形存储至候选多边形数组中,获取所述候选多边形数组中与所述当前多边形具有最长公共边的待合并多边形;第三处理子模块,用于将所述当前多边形与所述第二获取子模块获取的所述待合并多边形进行合并,并将合并后的多边形作为新的当前多边形,以继续对删除所述待合并多边形的所述剩余多边形和所述新的当前多边形按照所述预设贪心算法进行合并,直至完成对所述多个多边形的合并处理;第四处理子模块,用于若所述第二判断子模块判定不存在所述目标多边形,将所述当前多边形保存至凸多边形数组中,并继续对所述剩余多边形中的多边形按照所述预设贪心算法进行合并,直至完成对所述多个多边形的合并处理。
在该技术方案中,当对经三角剖分得到的预设Delaunay三角形按照预设贪心算法进行合并时,若仅有一个预设Delaunay三角形则无需进行合并,说明对待剖分字形的剖分已完成,可以直接应用于后期的模式识别、图形动画、计算机辅助设计等,具有良好的适应性。
而若有多个预设Delaunay三角形时则需要判断是否能够进行合并,由于三角形也属于多边形,则对于经过三角剖分后得到的多个多边形,首先对其中的一个多边形判断在除该当前多边形外的剩余多边形中是否存在能与其进行合并的目标多边形,即与该当前多边形具有公共边,且两多边形合并后的角度为凸角,若存在则将其存放至候选多边形组中,进而在候选多边形组中选择与该当前多边形不存在包含关系且具有最长公共边的多边形进行合并,并将合并后的多边形置于最初的多边形组中重复上述处理过程,若存在有包含关系的多边形,以及若是当前多边形包含目标多边形,则将目标多边形删除后对最初的多边形组中剩余的多边形重复上述处理过程,直至将最初的多边形组中不包含任何多边形,即将合并后且无法继续合并的多边形均存放至凸多边形数组中为止,而若为目标多边形包含当前多边形,则将该当前多边形与其他目标多边形进行包含关系的判断,进而根据包含关系的判断结果执行相应的操作,从而确保对待剖分字形的最大凸剖分。
在上述任一技术方案中,优选地,所述第三处理子模块具体用于:判断所述最长公共边分别在所述当前多边形中的方向和所述待合并多边形中的方向是否一致;若相反,将所述当前多边形和所述待合并多边形直接合并,若一致,将所述待合并多边形的方向取反后与所述当前多边形进行合并。
在该技术方案中,对两多边形(当前多边形和待合并多边形)进行贪心合并时需要考虑两多边形的方向,从而确保合并后的多边形的方向统一,即均为顺时针方向或逆时针方向,具体地,若两多边形的公共边在各自多边形中的方向相反,则说明两多边形可以直接合并,否则需要对其中的一个多边形的方向进行取反后才能进行多边形的合并,比如将待合并多边形的方向取反,当然也可以将当前多边形的方向取反,如此,通过判断两多边形的公共边的方向是否统一可以很方便的调整并确定合并后的多边形的方向,保证合并后的多边形轮廓边的方向统一。
在上述任一技术方案中,优选地,在所述预设Delaunay三角形中,所述其他字形轮廓点位于所述当前有向边的左侧,所述其他字形轮廓点与所述当前有向边的两端点相连形成的两条边不经过所述待剖分字形的空白区域、且不与所述每个连通区域中的其他有向边相交,以及所述预设Delaunay三角形不包含所述待剖分字形中的空白区域,所述预设Delaunay三角形的外接圆面积最小。
在该技术方案中,经改进的Delaunay算法(即预设Delaunay算法)对待剖分字形的连通区域进行三角剖分得到的预设Delaunay三角形在满足如下条件时才是有效的Delaunay三角形,具体地,与当前有向边构成预设Delaunay三角形的任一其他字形轮廓点应位于该当前有向边的左侧,且其他字形轮廓点与该当前有向边的两端点分别相连后形成的两条边不经过待剖分字形的空白区域,以避免对空白区域进行剖分影响字形剖分最终剖分结果的准确性,而且该两条边不与其当前所在的连通区域中的其他有向边相交,以确保剖分得到的预设Delaunay三角形的准确性,而且该有效的Delaunay三角形(即预设Delaunay三角形)不应包含待剖分字形中的空白区域,且其外接圆面积最小,以助于解决二维字形中存在孔的字形剖分问题和部分区域未剖分的问题,使得进一步的字形处理变得更加方便,从而提高字形剖分的质量。
在上述任一技术方案中,优选地,所述获取模块包括:第三获取子模块,用于获取各所述字形轮廓中包含的字形轮廓点,以计算所述各字形轮廓的矢量面积;第二确定子模块,用于若当前字形轮廓的矢量面积为正,确定所述当前字形轮廓为所述待剖分字形的内轮廓,否则,确定所述当前字形轮廓为所述待剖分字形的外轮廓。
在该技术方案中,可以通过计算待剖分字形中的各字形轮廓的矢量面积的方式区分其各自为内轮廓还是外轮廓,具体地,根据各字形轮廓上的字形轮廓点计算其矢量面积,即由对该字形轮廓上的任一字形轮廓点依次与该字形轮廓上每相邻的两个字形轮廓点连线构成的三角形加和得到每个字形轮廓的矢量面积,进一步地,在左手坐标系(即屏幕坐标系,坐标原点在屏幕左上角)下,若计算得到的字形轮廓的矢量面积为正则该字形轮廓为待剖分字形的内轮廓,相反地,若计算得到的字形轮廓的矢量面积为负则该字形轮廓为待剖分字形的外轮廓。
本发明的上述技术方案,通过读取待剖分字形的字形轮廓,利用改进的Delaunay算法对字形进行三角剖分,并结合贪心算法对剖分得到的三角形进行合并的方式,不仅可以达到最大凸剖分的目的,而且还解决了二维字形中存在孔的字形剖分问题和部分区域未剖分的问题,使得进一步的字形处理变得更加方便,有效地提高了字形剖分的质量。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
下面结合图1至图6对本发明的实施例的字形剖分方法进行详细说明。
如图1所示,根据本发明的实施例的字形剖分方法,包括以下流程步骤:
步骤S10,获取待剖分字形中的字形轮廓,以确定其内轮廓和外轮廓。
进一步地,步骤S10可以具体执行为:获取各所述字形轮廓中包含的字形轮廓点,以计算所述各字形轮廓的矢量面积;若当前字形轮廓的矢量面积为正,则确定所述当前字形轮廓为所述待剖分字形的内轮廓,否则,确定所述当前字形轮廓为所述待剖分字形的外轮廓。
在该实施例中,可以通过计算待剖分字形中的各字形轮廓的矢量面积的方式区分其各自为内轮廓还是外轮廓,具体地,根据各字形轮廓上的字形轮廓点计算其矢量面积,即由对该字形轮廓上的任一字形轮廓点依次与该字形轮廓上每相邻的两个字形轮廓点连线构成的三角形加和得到每个字形轮廓的矢量面积,进一步地,在左手坐标系(即屏幕坐标系,坐标原点在屏幕左上角)下,若计算得到的字形轮廓的矢量面积为正则该字形轮廓为待剖分字形的内轮廓,相反地,若计算得到的字形轮廓的矢量面积为负则该字形轮廓为待剖分字形的外轮廓,其中,待剖分字形的内轮廓呈顺时针方向。
步骤S20,确定与每个内轮廓对应的外轮廓,以根据每对对应的内轮廓和外轮廓得到所述待剖分字形的至少一个连通区域。
进一步地,如图2所示,步骤S20可以具体执行为:
步骤S202,获取所述每个内轮廓上的任一字形轮廓点到所有外轮廓中的每个外轮廓的最小距离。
步骤S204,将至少一个所述最小距离中的最小值对应的外轮廓确定为与所述每个内轮廓对应的外轮廓。
步骤S206,将所述每个内轮廓上的字形轮廓点和与其对应的外轮廓上的字形轮廓点合并,得到所述至少一个连通区域。。
在该实施例中,基于内轮廓上的字形轮廓点与对应包含在其外轮廓上的字形轮廓点的距离最近的规律,可以针对每个内轮廓计算其上的任一字形轮廓点到各外轮廓上的所有字形轮廓点的距离,首先通过比较确定每个内轮廓到各外轮廓各自的最小距离,进而将各最小距离中距离值最小的对应的外轮廓确定为当前内轮廓的外轮廓,通过该处理方式可以确定对应于每个内轮廓的外轮廓,然后将对应的内轮廓和外轮廓上的字形轮廓点进行合并,则每一个外轮廓与其包含的所有内轮廓构成了一个连通区域,进而可以用于进行三角剖分和贪心合并,达到最大凸剖分的目的。
步骤S30,按照预设Delaunay算法对所述至少一个连通区域中的每个连通区域进行三角剖分,得到至少一个预设Delaunay三角形。
进一步地,如图3所示,步骤S30可以具体执行为:
步骤S302,判断所述每个连通区域的轮廓上的其他字形轮廓点是否能与当前有向边形成预设Delaunay三角形,所述其他字形轮廓点为所述每个连通区域的轮廓上除所述当前有向边的端点外的任一字形轮廓点,所述当前有向边为所述每个连通区域的全部有向边形成的当前数组中的有向边。
步骤S304,当判定所述其他字形轮廓点能与所述当前有向边形成所述预设Delaunay三角形时,保留当前形成的所述预设Delaunay三角形,并将所述当前有向边自所述当前数组中删除,否则将所述当前有向边保存至临时数组中,直至所述当前数组中有向边个数减为0。
步骤S306,对所述临时数组中的每条有向边进行能否与所述每个连通区域的轮廓上剩余的字形轮廓点形成所述预设Delaunay三角形的判断,直至完成对所述全部有向边的处理,以得到所述至少一个预设Delaunay三角形。
在该实施例中,对每个连通区域按照预设Delaunay算法进行三角剖分时,以连通区域中的每一条有向边为单位进行剖分,当连通区域的轮廓上除有向边的端点对应的字形轮廓点外的其他任一字形轮廓点能与该有向边形成预设Delaunay三角形(即有效的Delaunay三角形)时,即成功进行了一次三角剖分,即可以保留该预设Delaunay三角形,并将该当前有向边自其所在的有向边数组(即当前数组)中删除,否则若无法形成预设Delaunay三角形,即将其暂时存储到临时数组中,待对当前数组中有向边处理完成后再对临时数组中的有向边进行相应的处理,以完成对每个连通区域的三角剖分,从而确保在贪心合并为凸多边形后,达到字形的最大凸剖分;其中,有向边为每个连通区域的轮廓上相邻两个字形轮廓点之间的有向线段,方向与轮廓的方向一致。
其中,经上述步骤对如图4A所示的“丿”和“跋”进行三角剖分处理,其效果示意图如图4B所示,可见其剖分有效地解决了二维字形中存在孔(即空白区域,如图4A中的箭头所示)的字形剖分的问题和部分区域未剖分的问题,进而对解决字形渐变、图形处理等领域的相关问题具有直接的应用价值。
步骤S40,按照预设贪心算法对所述至少一个预设Delaunay三角形进行合并,得到所述待剖分字形的至少一个凸多边形。
在该实施例中,当获取到待剖分字形中的每一个内轮廓以及与其对应的外轮廓后,外轮廓呈逆时针方向,可以根据每对对应的内轮廓和外轮廓得到该待剖分字形的一个或多个连通区域,进而通过对每一个连通区域应用预设Delaunay算法(即改进的Delaunay算法)进行三角剖分,然后对得到的一个或多个预设Delaunay三角形应用预设贪心算法进行合并,以将该待剖分字形剖分为至少一个凸多边形,达到最大凸剖分的目的的同时,可以解决二维字形中存在孔(即空白区域)不利于字形剖分的问题和字形的部分区域无法剖分的问题,使得进一步的字形处理变得更加方便,有效地提高了字形剖分的质量。
进一步地,在上述实施例中,步骤S40具体执行为:当所述至少一个预设Delaunay三角形为一个时,对所述待剖分字形的剖分完成;当所述至少一个预设Delaunay三角形为多个时,对由多个预设Delaunay三角形组成的多个多边形,判断剩余多边形中是否存在与当前多边形存在公共边、且与所述当前多边形在所述公共边的两端点处合并得到的角度为凸角的目标多边形,其中所述剩余多边形为所述多个多边形中除所述当前多边形外的其他多边形;
若存在所述目标多边形,判断所述目标多边形是否与所述当前多边形存在包含关系;若存在包含关系,且所述当前多边形包含所述目标多边形,则删除所述目标多边形,对所述多个多边形中除所述目标多边形外的其他多边形按照所述预设贪心算法进行合并,否则判断所述当前多边形与其他目标多边形的包含关系;若不存在包含关系,将所述目标多边形存储至候选多边形数组中,获取所述候选多边形数组中与所述当前多边形具有最长公共边的待合并多边形;将所述当前多边形与所述待合并多边形进行合并,并将合并后的多边形作为新的当前多边形,以继续对删除所述待合并多边形的所述剩余多边形和所述新的当前多边形按照所述预设贪心算法进行合并,直至完成对所述多个多边形的合并处理;
若不存在所述目标多边形,将所述当前多边形保存至凸多边形数组中,并继续对所述剩余多边形中的多边形按照所述预设贪心算法进行合并,直至完成对所述多个多边形的合并处理。
在该实施例中,当对经三角剖分得到的预设Delaunay三角形按照预设贪心算法进行合并时,若仅有一个预设Delaunay三角形则无需进行合并,说明对待剖分字形的剖分已完成,可以直接应用于后期的模式识别、图形动画、计算机辅助设计等,具有良好的适应性。
而若有多个预设Delaunay三角形时则需要判断是否能够进行合并,由于三角形也属于多边形,则对于经过三角剖分后得到的多个多边形,首先对其中的一个多边形判断在除该当前多边形外的剩余多边形中是否存在能与其进行合并的目标多边形,即与该当前多边形具有公共边,且两多边形合并后的角度为凸角,若存在则将其存放至候选多边形组中,进而在候选多边形组中选择与该当前多边形不存在包含关系且具有最长公共边的多边形进行合并,并将合并后的多边形置于最初的多边形组中重复上述处理过程,若存在有包含关系的多边形,以及若是当前多边形包含目标多边形,则将目标多边形删除后对最初的多边形组中剩余的多边形重复上述处理过程,直至将最初的多边形组中不包含任何多边形,即将合并后且无法继续合并的多边形均存放至凸多边形数组中为止,而若为目标多边形包含当前多边形,则将该当前多边形与其他目标多边形进行包含关系的判断,进而根据包含关系的判断结果执行相应的操作,从而确保对待剖分字形的最大凸剖分。
进一步地,在上述任一实施例中,所述将所述当前多边形与所述待合并多边形进行合并的步骤,还包括:判断所述最长公共边分别在所述当前多边形中的方向和所述待合并多边形中的方向是否一致;若相反,将所述当前多边形和所述待合并多边形直接合并,若一致,将所述待合并多边形的方向取反后与所述当前多边形进行合并。
在该实施例中,对两多边形(当前多边形和待合并多边形)进行贪心合并时需要考虑两多边形的方向,从而确保合并后的多边形的方向统一,即均为顺时针方向或逆时针方向,具体地,若两多边形的公共边在各自多边形中的方向相反,则说明两多边形可以直接合并,否则需要对其中的一个多边形的方向进行取反后才能进行多边形的合并,比如将待合并多边形的方向取反,当然也可以将当前多边形的方向取反,如此,通过判断两多边形的公共边的方向是否统一可以很方便的调整并确定合并后的多边形的方向,保证合并后的多边形轮廓边的方向统一。
进一步地,在与当前多边形具有最长公共边的待合并多边形有多个时,可以优先选取公共边方向相反的待合并多边形进行合并,若公共边方向均相同,则可以优先选取第一待合并多边形进行合并。
进一步地,在上述任一实施例中,在所述预设Delaunay三角形中,所述其他字形轮廓点位于所述当前有向边的左侧,所述其他字形轮廓点与所述当前有向边的两端点相连形成的两条边不经过所述待剖分字形的空白区域、且不与所述每个连通区域中的其他有向边相交,以及所述预设Delaunay三角形不包含所述待剖分字形中的空白区域,所述预设Delaunay三角形的外接圆面积最小。
在该实施例中,经改进的Delaunay算法(即预设Delaunay算法)对待剖分字形的连通区域进行三角剖分得到的预设Delaunay三角形在满足如下条件时才是有效的Delaunay三角形,具体地,与当前有向边构成预设Delaunay三角形的任一其他字形轮廓点应位于该当前有向边的左侧,且其他字形轮廓点与该当前有向边的两端点分别相连后形成的两条边不经过待剖分字形的空白区域,以避免对空白区域进行剖分影响字形剖分最终剖分结果的准确性,而且该两条边不与其当前所在的连通区域中的其他有向边相交,以确保剖分得到的预设Delaunay三角形的准确性,而且该有效的Delaunay三角形(即预设Delaunay三角形)不应包含待剖分字形中的空白区域,且其外接圆面积最小,以助于解决二维字形中存在孔的字形剖分问题和部分区域未剖分的问题,使得进一步的字形处理变得更加方便,从而提高字形剖分的质量。
进一步地,结合图5对步骤S40的贪心合并过程进行详细说明。
假设按照预设Delaunay算法对待剖分字形中的各连通区域三角剖分后得到N个预设Delaunay三角形,这些三角形满足以下条件:任何两个三角形要么不相交,要么只有一条公共边,不能同时有两条或两条以上的公共边。此处将预设Delaunay三角形保存为多边形结构,便于后期合并过程中统一判断。
具体地,用Pk(k=0,1,2,…,N-1)表示至少一个多边形(初始为预设Delaunay三角形,即为当前数组),按照预设贪心算法进行合并的流程如图5所示,包括以下步骤:
步骤S50,判断至少一个多边行的个数N是否为1,若是,则贪心合并流程结束,否则执行步骤S51;
步骤S51,令k=0;
步骤S52,令k=k+1;
步骤S53,判断多边形P0与Pk是否存在公共边,若是执行步骤S54,否则返回执行步骤S52;
步骤S54,判断多边形P0与Pk(即当前多边形与目标多边形)在公共边的两端点的角分别合并后的角是否为凸角,即相加后的角度是否小于或等于180度,若是执行步骤S55,否则返回执行步骤S52;
步骤S55,判断多边形P0与Pk是否存在包含关系,比如点包含关系或者边包含关系,若不存在执行步骤S58,否则执行步骤S56;
步骤S56,判断P0是否包含Pk,若是执行步骤S57,否则返回执行步骤S52;
步骤S57,将Pk自当前数组中删除,令N=N-1,返回步骤S50,继续对剩余的多边形进行贪心合并;
步骤S58,将多边形Pk保存到候选多边形数组中;
步骤S59,判断k的是值是否为N-1,若是执行步骤S60,否则返回执行步骤S52;
步骤S60,判断候选多边形数组的长度是否为0,即判断候选多边形数组中是否有能与P0合并的多边形,若有执行步骤S61,否则执行步骤S63;
步骤S61,在候选多边形数组中选择公共边最长的多边形PM与P0进行合并;
在该步骤中,判断P0与PM的公共边同向或异向,分别保存公共边和公共边左端点和右端点相连的两条边在P0中的边编号以及在PM中的边编号;判断P0公共边左端点和右端点相连的两条边分别与PM公共边左(或右)端点和右(或左)端点相连的两条边是否共线,主要包括以下几种情况:
(1)若均共线,则分别计算两个端点处的共线边,将两条共线边和PM中其它边按顺序保存到P0,其中P0边数减1;
(2)若仅P0公共边左端点处共线,则计算左端点处的共线边,将该共线边和PM中其它边按顺序保存到P0,其中P0边数保持不变;
(3)若仅P0公共边右端点处共线,则计算右端点处的共线边,将该共线边和PM中其它边按顺序保存到P0,其中P0边数保持不变;
(4)若均不共线,则将PM中边按顺序保存到P0,其中P0边数加1;
步骤S62,将多边形PM与P0合并后的多边形记为新的P0,并将PM自当前数组中删除,令N=N-1,返回步骤S50,继续对剩余的多边形进行贪心合并;
其中,保存过程中需要注意各边的方向与多边形的方向是否一致,即若P0与PM的公共边同向,则两多边形方向相反,合并时需要将其中一个多边形的边方向取反,若P0与PM的公共边异向,则两多边形方向相同,合并时直接按两多边形边的原方向即可。
步骤S63,保存P0到合并后的多边形数组(即凸多边形数组),在当前数组(即多个多边形)中删除P0,令N=N-1,返回执行步骤S50。
在该实施例中,凸多边形是对三角剖分结果的进一步合并处理,因为一个凸的图形较其它图形,在计算机表示、分析及处理方面方便得多,而且凸多边形较之于三角形,能更简便地表示字形,而且凸多变形广泛应用于物体变形、图形动画、计算机辅助设计等领域,在计算机图形学方面有很多重要的应用,则通过结合贪心算法对三角形进行合并,以达到最大凸剖分的目的,使得进一步字形处理更加方便,且可以保证字形剖分的质量,其中,经上述步骤对如图4B所示的经过三角剖分后的“丿”和“跋”进行贪心合并的效果如图6所示。
下面结合图7至图11对本发明的实施例的字形剖分装置进行详细说明。
如图7所示,根据本发明的实施例的字形剖分装置700,包括:获取模块702、确定模块704、剖分模块706和合并模块708。
其中,所述获取模块702用于获取待剖分字形中的字形轮廓,以确定其内轮廓和外轮廓;所述确定模块704用于确定与所述每个内轮廓对应的外轮廓,以根据每对对应的内轮廓和外轮廓得到所述待剖分字形的至少一个连通区域;所述剖分模块706用于按照预设Delaunay算法对所述确定模块704得到的所述至少一个连通区域中的每个连通区域进行三角剖分,得到至少一个预设Delaunay三角形;所述合并模块708用于按照预设贪心算法对所述剖分模块706得到的所述至少一个预设Delaunay三角形进行合并,得到所述待剖分字形的至少一个凸多边形。
在该实施例中,当获取到待剖分字形中的每一个内轮廓以及与其对应的外轮廓后,其中,待剖分字形的内轮廓呈顺时针方向,外轮廓呈逆时针方向,可以根据每对对应的内轮廓和外轮廓得到该待剖分字形的一个或多个连通区域,进而通过对每一个连通区域应用预设Delaunay算法(即改进的Delaunay算法)进行三角剖分,然后对得到的一个或多个预设Delaunay三角形应用预设贪心算法进行合并,以将该待剖分字形剖分为至少一个凸多边形,达到最大凸剖分的目的的同时,可以解决二维字形中存在孔(即空白区域)不利于字形剖分的问题和字形的部分区域无法剖分的问题,使得进一步的字形处理变得更加方便,有效地提高了字形剖分的质量。
进一步地,如图8所示,在上述实施例中,所述确定模块704包括:第一获取子模块7042、第一确定子模块7044和合并子模块7046。
其中,所述第一获取子模块7042用于获取所述每个内轮廓上的任一字形轮廓点到所有外轮廓中的每个外轮廓的最小距离;所述第一确定子模块7044用于将所述第一获取子模块7042获取的至少一个所述最小距离中的最小值对应的外轮廓确定为与所述每个内轮廓对应的外轮廓;所述合并子模块7046用于将所述每个内轮廓上的字形轮廓点和所述第一确定子模块7044确定的与其对应的外轮廓上的字形轮廓点合并,得到所述至少一个连通区域。
在该实施例中,基于内轮廓上的字形轮廓点与对应包含在其外轮廓上的字形轮廓点的距离最近的规律,可以针对每个内轮廓计算其上的任一字形轮廓点到各外轮廓上的所有字形轮廓点的距离,首先通过比较确定每个内轮廓到各外轮廓各自的最小距离,进而将各最小距离中距离值最小的对应的外轮廓确定为当前内轮廓的外轮廓,通过该处理方式可以确定对应于每个内轮廓的外轮廓,然后将对应的内轮廓和外轮廓上的字形轮廓点进行合并,则每一个外轮廓与其包含的所有内轮廓构成了一个连通区域,进而可以用于进行三角剖分和贪心合并,达到最大凸剖分的目的。
进一步地,如图9所示,在上述任一实施例中,所述剖分模块706包括:第一判断子模块7062、第一处理子模块7064和调度子模块7066。
其中,所述第一判断子模块7062用于判断所述每个连通区域的轮廓上的其他字形轮廓点是否能与当前有向边形成预设Delaunay三角形,所述其他字形轮廓点为所述每个连通区域的轮廓上除所述当前有向边的端点外的任一字形轮廓点,所述当前有向边为所述每个连通区域的全部有向边形成的当前数组中的有向边;所述第一处理子模块7064用于当判定所述其他字形轮廓点能与所述当前有向边形成所述预设Delaunay三角形时,保留当前形成的所述预设Delaunay三角形,并将所述当前有向边自所述当前数组中删除,否则将所述当前有向边保存至临时数组中,直至所述当前数组中有向边个数减为0;所述调度子模块7066用于调度所述第一判断子模块7062对所述临时数组中的每条有向边进行能否与所述每个连通区域的轮廓上剩余的字形轮廓点形成所述预设Delaunay三角形的判断,直至完成对所述全部有向边的处理,以得到所述至少一个预设Delaunay三角形。
在该实施例中,对每个连通区域按照预设Delaunay算法进行三角剖分时,以连通区域中的每一条有向边为单位进行剖分,当连通区域的轮廓上除有向边的端点对应的字形轮廓点外的其他任一字形轮廓点能与该有向边形成预设Delaunay三角形(即有效的Delaunay三角形)时,即成功进行了一次三角剖分,即可以保留该预设Delaunay三角形,并将该当前有向边自其所在的有向边数组(即当前数组)中删除,否则若无法形成预设Delaunay三角形,即将其暂时存储到临时数组中,待对当前数组中有向边处理完成后再对临时数组中的有向边进行相应的处理,以完成对每个连通区域的三角剖分,从而确保在贪心合并为凸多边形后,达到字形的最大凸剖分;其中,有向边为每个连通区域的轮廓上相邻两个字形轮廓点之间的有向线段,方向与轮廓的方向一致。
进一步地,在上述任一实施例中,当所述至少一个预设Delaunay三角形为一个时,对所述待剖分字形的剖分完成。
在该实施例中,当对经三角剖分得到的预设Delaunay三角形按照预设贪心算法进行合并时,若仅有一个预设Delaunay三角形则无需进行合并,说明对待剖分字形的剖分已完成,可以直接应用于后期的模式识别、图形动画、计算机辅助设计等,具有良好的适应性。
进一步地,如图10所示,在上述任一实施例中,所述合并模块708包括:第二判断子模块7081、第三判断子模块7082、第二处理子模块7083、第二获取子模块7084、第三处理子模块7085和第四处理子模块7086。
其中,所述第二判断子模块7081用于对由多个预设Delaunay三角形组成的多个多边形,判断剩余多边形中是否存在与当前多边形存在公共边、且与所述当前多边形在所述公共边的两端点处合并得到的角度为凸角的目标多边形,其中所述剩余多边形为所述多个多边形中除所述当前多边形外的其他多边形;所述第三判断子模块7082用于若所述第二判断子模块7081判定存在所述目标多边形,判断所述目标多边形是否与所述当前多边形存在包含关系;所述第二处理子模块7083用于若所述第三判断子模块7082判定存在包含关系,且所述当前多边形包含所述目标多边形,则删除所述目标多边形,对所述多个多边形中除所述目标多边形外的其他多边形按照所述预设贪心算法进行合并,否则判断所述当前多边形与其他目标多边形的包含关系;所述第二获取子模块7084用于若所述第三判断子模块7082判定不存在包含关系,将所述目标多边形存储至候选多边形数组中,获取所述候选多边形数组中与所述当前多边形具有最长公共边的待合并多边形;所述第三处理子模块7085用于将所述当前多边形与所述第二获取子模块7084获取的所述待合并多边形进行合并,并将合并后的多边形作为新的当前多边形,以继续对删除所述待合并多边形的所述剩余多边形和所述新的当前多边形按照所述预设贪心算法进行合并,直至完成对所述多个多边形的合并处理;所述第四处理子模块7086用于若所述第二判断子模块7081判定不存在所述目标多边形,将所述当前多边形保存至凸多边形数组中,并继续对所述剩余多边形中的多边形按照所述预设贪心算法进行合并,直至完成对所述多个多边形的合并处理。
在该实施例中,若有多个预设Delaunay三角形时则需要判断是否能够进行合并,由于三角形也属于多边形,则对于经过三角剖分后得到的多个多边形,首先对其中的一个多边形判断在除该当前多边形外的剩余多边形中是否存在能与其进行合并的目标多边形,即与该当前多边形具有公共边,且两多边形合并后的角度为凸角,若存在则将其存放至候选多边形组中,进而在候选多边形组中选择与该当前多边形不存在包含关系且具有最长公共边的多边形进行合并,并将合并后的多边形置于最初的多边形组中重复上述处理过程,若存在有包含关系的多边形,以及若是当前多边形包含目标多边形,则将目标多边形删除后对最初的多边形组中剩余的多边形重复上述处理过程,直至将最初的多边形组中不包含任何多边形,即将合并后且无法继续合并的多边形均存放至凸多边形数组中为止,而若为目标多边形包含当前多边形,则将该当前多边形与其他目标多边形进行包含关系的判断,进而根据包含关系的判断结果执行相应的操作,从而确保对待剖分字形的最大凸剖分。
进一步地,在上述实施例中,所述第三处理子模块7085具体用于:判断所述最长公共边分别在所述当前多边形中的方向和所述待合并多边形中的方向是否一致;若相反,将所述当前多边形和所述待合并多边形直接合并,若一致,将所述待合并多边形的方向取反后与所述当前多边形进行合并。
在该实施例中,对两多边形(当前多边形和待合并多边形)进行贪心合并时需要考虑两多边形的方向,从而确保合并后的多边形的方向统一,即均为顺时针方向或逆时针方向,具体地,若两多边形的公共边在各自多边形中的方向相反,则说明两多边形可以直接合并,否则需要对其中的一个多边形的方向进行取反后才能进行多边形的合并,比如将待合并多边形的方向取反,当然也可以将当前多边形的方向取反,如此,通过判断两多边形的公共边的方向是否统一可以很方便的调整并确定合并后的多边形的方向,保证合并后的多边形轮廓边的方向统一。
进一步地,在与当前多边形具有最长公共边的待合并多边形有多个时,可以优先选取公共边方向相反的待合并多边形进行合并,若公共边方向均相同,则可以优先选取第一待合并多边形进行合并。
进一步地,在上述任一实施例中,在所述预设Delaunay三角形中,所述其他字形轮廓点位于所述当前有向边的左侧,所述其他字形轮廓点与所述当前有向边的两端点相连形成的两条边不经过所述待剖分字形的空白区域、且不与所述每个连通区域中的其他有向边相交,以及所述预设Delaunay三角形不包含所述待剖分字形中的空白区域,所述预设Delaunay三角形的外接圆面积最小。
在该实施例中,经改进的Delaunay算法(即预设Delaunay算法)对待剖分字形的连通区域进行三角剖分得到的预设Delaunay三角形在满足如下条件时才是有效的Delaunay三角形,具体地,与当前有向边构成预设Delaunay三角形的任一其他字形轮廓点应位于该当前有向边的左侧,且其他字形轮廓点与该当前有向边的两端点分别相连后形成的两条边不经过待剖分字形的空白区域,以避免对空白区域进行剖分影响字形剖分最终剖分结果的准确性,而且该两条边不与其当前所在的连通区域中的其他有向边相交,以确保剖分得到的预设Delaunay三角形的准确性,而且该有效的Delaunay三角形(即预设Delaunay三角形)不应包含待剖分字形中的空白区域,且其外接圆面积最小,以助于解决二维字形中存在孔的字形剖分问题和部分区域未剖分的问题,使得进一步的字形处理变得更加方便,从而提高字形剖分的质量。
进一步地,如图11所示,在上述任一实施例中,所述获取模块702包括:第三获取子模块7022和第二确定子模块7024。
其中,所述第三获取子模块7022用于获取各所述字形轮廓中包含的字形轮廓点,以计算所述各字形轮廓的矢量面积;所述第二确定子模块7024用于若当前字形轮廓的矢量面积为正,确定所述当前字形轮廓为所述待剖分字形的内轮廓,否则,确定所述当前字形轮廓为所述待剖分字形的外轮廓。
在该实施例中,可以通过计算待剖分字形中的各字形轮廓的矢量面积的方式区分其各自为内轮廓还是外轮廓,具体地,根据各字形轮廓上的字形轮廓点计算其矢量面积,即由对该字形轮廓上的任一字形轮廓点依次与该字形轮廓上每相邻的两个字形轮廓点连线构成的三角形加和得到每个字形轮廓的矢量面积,进一步地,在左手坐标系(即屏幕坐标系,坐标原点在屏幕左上角)下,若计算得到的字形轮廓的矢量面积为正则该字形轮廓为待剖分字形的内轮廓,相反地,若计算得到的字形轮廓的矢量面积为负则该字形轮廓为待剖分字形的外轮廓。
以上结合附图详细说明了本发明的技术方案,该技术方案通过读取待剖分字形的字形轮廓,利用改进的Delaunay算法对字形进行三角剖分,并结合贪心算法对剖分得到的三角形进行合并的方式,不仅可以达到最大凸剖分的目的,而且还解决了二维字形中存在孔的字形剖分问题和部分区域未剖分的问题,使得进一步的字形处理变得更加方便,有效地提高了字形剖分的质量。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。