当前位置: 首页 > 专利查询>中南大学专利>正文

带岛的多边形曲线偏移算法制造技术

技术编号:20869881 阅读:22 留言:0更新日期:2019-04-17 10:02
本发明专利技术公开了一种带岛的多边形曲线偏移算法,它首先对各多边形的时针方向进行定向;其次对多边形偏移方向和时针方向进行约定;接着对多边形上各顶点进行凹点或凸点的判定区分;然后对于判定为凹点的顶点采用法向‑线偏移,对于判定为凸点的顶点采用点偏移;再判定局部无效边并去除;最后去除全局无效边即可得到偏移后的曲线。在整个过程中第一步检测曲线方向并且偏移所有的顶点,时间复杂度为O(n);判定去除局部无效边时,时间复杂度为O(nlogn);去除全局无效边具有O(n

【技术实现步骤摘要】
带岛的多边形曲线偏移算法
本专利技术涉及一种多边形偏移算法,特别是涉及一种带岛的多边形曲线偏移算法。
技术介绍
在许多的关于2D偏移等距曲线的矢量算法的研究方法中,有三种方法被广泛应用:使用Voronoi图、基于边-法向偏移和基于角平分线的偏移。其中使用Voronoi图的方法的优势是可以避免自相交的发生。但是由于生成Voronoi图的成本巨大,并且存在数值误差,在快速的算法中很少被使用。基于边-法向偏移在逻辑上是直观和简单的,以往的工作表明,可以使用边的起点和终点沿着边的法线方向进行一段距离的偏移来完成整个多边形的偏移。但是,这种方法的主要问题是需要解决偏移之后边的不连续和自相交问题的情况,并且处理它们是十分耗时的过程,导致算法的复杂性很高并容易出现数值错误。在基于角平分线偏移的方法下,由于角平分线上的点到角两边的距离相等,这样通过处理原始多边形中的角可以得到偏移之后多边形的顶点,按照顺序依次相连便可以得到偏移多边形。然后进行判定,去除局部无效边和全局无效边。但是,仅仅使用点偏移的方法在局部锐角角度极小的情况下因为不生成圆弧会发生局部的偏移量很大的情况,虽然有些算法使用截断进行了改进,但依然不是准确的结果。
技术实现思路
本专利技术的目的在于针对现有技术的不足之处,提供一种既能降低算法复杂度又能保证结果准确的带岛的多边形曲线偏移算法。本专利技术提供的这种带岛的多边形曲线偏移算法,该算法包括以下步骤:步骤一、对各多边形的时针方向进行定向;步骤二、对多边形偏移方向和时针方向进行约定;步骤三、对于多边形上任一顶点Pi进行凹点或凸点判定,如果为凹点采用法向-线偏移,如图为凸点则采用点偏移;步骤四、判定局部无效边并去除;步骤五、去除全局无效边。在一个具体实施方式中,在步骤一中通过多边形在凸包上的极值点对多边形的时针方向进行定向。进一步的,在步骤二中约定逆时针方向表示向多边形内部偏移、顺时针方向表示向多边形外部偏移。在一个具体实施方式中,在步骤三中,Pi与相邻顶点Pi+1之间存在有向边ei,ei=Pi-Pi+1,为ei的单位向量,为ei的单位法向量,通过边的连续性定义ei的前向边为ei-1,定义ei的后向边为ei+1,根据公式:对多边形上各顶点进行分类判定,如果pconvex≤0,则称点P为多边形的凹点,如果pconvex>0,则称点P为多边形的凸点,凹点采用法向-线偏移的方式,凸点采用点偏移的方式。进一步的,在步骤三中,法向-线偏移的具体步骤为:对点凹Pi通过公式得到偏移后的两个控制点Qi,1和点Qi,2,以Pi为圆心,r为半径画圆,由过圆心和点Qi,1以及过圆心和点Qi,2的两条直线在圆周上截取的一端劣弧为点Pi的偏移曲线;对凸点pi,偏移后的点qi为:ni为有向边ei的法向量,d为偏移距离的绝对值,φ为|ei|与|ei-1|的夹角。进一步的,步骤四中判定局部无效边并去除的具体步骤为:1)定义方向无效的边满足:pipi-1·qiqi-1<0,定义距离无效的顶点qi满足dist(qi,P)≥d,其中P为原始多边形;2)建立两个链表存放所有无效边和临时无效边;3)遍历多边形中所有的未遍历过的边3.1如果所遍历的边是非圆弧边并且满足方向无效,将无效原始边插入临时链表;3.2判断边的前后顶点是否满足距离无效,如果距离无效则将无效顶点所邻接的边按照顺序插入临时链表,并且向前(后)继续遍历顶点。同时标记边已经遍历,直到遍历的顶点均为有效的顶点;3.3将临时无效边链表插入存放所有无效边的链表中。4)遍历所有无效边的链表,建立结构体数组存放前向边、后向边和无效边;4.1遍历所有结构体中的无效边,使其延长线和不断和有效的前向边、后向边求交,并且向有效的顶点方向截取;4.2如果在前(后)向边上有交点,则使用交点代替无效顶点,同时去除掉所有的无效边的顶点;4.3如果在前(后)向边上没有交点,则使用前向边延长线和后向边求交以及后向边的反向延长线与前向边求交得到交点,进而得到新的多边形;5)将无效边链表的结果依次代替原始多边形的链表,得到新的多边形。进一步的,在步骤五中去除全局无效边时,首先,利用扫描线算法,对圆弧进行预处理,采用X轴作为主方向,将圆弧通过主方向上的极值点分成两个圆弧,使扫描线经过时能够将圆弧和折线同等对待;其次,对于单个多边形,确定所有偏移多边形的自相交顶点,步骤为:1)定义vLlist、vRlist、vlist分别存放左侧顶点、右侧顶点和自相交顶点,对于多边形中所有的边,左侧顶点插入vLlist,右侧顶点插入vRlist;2)对于vLlist、vRlist分别按照顶点在x轴上的投影坐标排序;3)建立局部边链表elist,顶点链表指针pL,pR,p;4)pL、pR在链表中遍历,其中pL一定是pR的前一个不重复的投影;4.1对于满足满足小于pL并且大于pR的顶点所在边和原始链表中所有边进行求交,将交点插入vlist中,并且记录相对应的边;4.2将vLlist、vRlist中不满足小于pL并且大于pR的顶点从局部边链表elist移除;5)将原始多边形插入交点后重新序列化;接着,重新定义多边形顶点的路由规则,规则为:a、对于原始多边形上的顶点方向不改变;b、对于自相交的顶点,跳转到相交的另一条边上的原始方向;根据该规则将偏移多边形划分成多个简单多边形;然后,根据原始多边形与偏移后各简单多边形的相交情况将各简单多边形分为O-I多边形,O多边形和I多边形三类,O-I多边形定义为:包含外多边形偏移边,与内部多边形偏移边有交,O多边形:包含外多边形偏移边,与内部多边形偏移边无交,I多边形:仅为内多边形偏移,并且只和内多边形偏移边有交;最后将O-I多边形和O多边形保留逆时针方向的多边形,I多边形根据步骤四保留顺时针方向的多边形。本专利技术在具体实施时首先对各多边形的时针方向进行定向;其次对多边形偏移方向和时针方向进行约定;接着对多边形上各顶点进行凹点或凸点的判定区分;然后对于判定为凹点的顶点采用法向-线偏移,对于判定为凸点的顶点采用点偏移;再判定局部无效边并去除;最后去除全局无效边即可得到偏移后的曲线。在整个过程中第一步检测曲线方向并且偏移所有的顶点,时间复杂度为O(n);判定去除局部无效边时,时间复杂度为O(nlogn);去除全局无效边具有O(n2/log(n))的时间复杂度,总而言之,整个偏移算法的时间复杂度可以被视为O(nlogn),降低了算法复杂度。附图说明图1为本专利技术一个优选实施例的算法过程框图。图2为多边形顶点判定为凹点或凸点的示意图。图3为顶点偏移路径示意图。图4为多边形分类示意图。图5为算例偏移示意图。具体实施方式如图1所示,本实施例提供的这种带岛的多边形曲线偏移算法,包括以下步骤:(Ⅰ)对各多边形的时针方向进行定向;由于单个多边形的遍历方式一定会存在顺时针方向和逆时针方向两种,可通过多边形在凸包上的极值点对于复杂多边形(包含圆弧段)的时针方向进行定向。其中凸包上的极值点可以认为是凸包在某个方向(例如x轴方向)上的投影的值的最大或者最小的点。(Ⅱ)约定逆时针方向表示向多边形内部偏移、顺时针方向表示向多边形外部偏移,其偏移向量r可以取负数表示与时针方向表示的偏移方向相反。(Ⅲ)A、对于多边形上任一顶点Pi进行凹点或凸点本文档来自技高网...

【技术保护点】
1.一种带岛的多边形曲线偏移算法,其特征在于,该算法包括以下步骤:步骤一、对各多边形的时针方向进行定向;步骤二、对多边形偏移方向和时针方向进行约定;步骤三、对于多边形上任一顶点Pi进行凹点或凸点判定,如顶点为凹点采用法向‑线偏移,如顶点为凸点则采用点偏移,得到偏移后多边形;步骤四、对偏移后多边形进行判定局部无效边并去除;步骤五、对偏移后多边形去除全局无效边。

【技术特征摘要】
1.一种带岛的多边形曲线偏移算法,其特征在于,该算法包括以下步骤:步骤一、对各多边形的时针方向进行定向;步骤二、对多边形偏移方向和时针方向进行约定;步骤三、对于多边形上任一顶点Pi进行凹点或凸点判定,如顶点为凹点采用法向-线偏移,如顶点为凸点则采用点偏移,得到偏移后多边形;步骤四、对偏移后多边形进行判定局部无效边并去除;步骤五、对偏移后多边形去除全局无效边。2.如权利要求1所述的带岛的多边形曲线偏移算法,其特征在于:在步骤一中通过多边形在凸包上的极值点对多边形的时针方向进行定向。3.如权利要求2所述的带岛的多边形曲线偏移算法,其特征在于:在步骤二中约定逆时针方向表示向多边形内部偏移、顺时针方向表示向多边形外部偏移。4.如权利要求1所述的带岛的多边形曲线偏移算法,其特征在于:在步骤三中,Pi与相邻顶点Pi+1之间存在有向边ei,ei=Pi-Pi+1,为ei的单位向量,为ei的单位法向量,通过边的连续性定义ei的前向边为ei-1定义ei的后向边为ei+1,根据公式:对多边形上各顶点进行分类判定,如果pconvex≤0,则称点P为多边形的凹点,如果pconvex>0,则称点P为多边形的凸点,凹点采用法向-线偏移的方式,凸点采用点偏移的方式。5.如权利要求4所述的带岛的多边形曲线偏移算法,其特征在于:在步骤三中,法向-线偏移的具体步骤为:对点凹Pi通过公式得到偏移后的两个控制点Qi,1和点Qi,2,以Pi为圆心,r为半径画圆,由过圆心和点Qi,1以及过圆心和点Qi,2的两条直线在圆周上截取的一端劣弧为点Pi的偏移曲线;对凸点pi,偏移后的点qi为:ni为有向边ei的法向量,d为偏移距离的绝对值,φ为|ei|与|ei-1|的夹角。6.如权利要求5所述的带岛的多边形曲线偏移算法,其特征在于:步骤四中判定局部无效边并去除的具体步骤为:1)定义方向无效的边满足:pipi-1·qiqi-1<0,定义距离无效的顶点qi满足dist(qi,P)≥d,其中P为原始多边形;2)建立两个链表存放所有无效边和临时无效边;3)遍历多边形中所有的未遍历过的边3.1如果所遍历的边是非圆弧边并且满足方向无效,将无效原始边插入临时链表;3.2判断边的前后顶点是否满足距离无效,如果距离无效则将无效顶点所邻接的边按照顺序插入临时链表,并且向前(后)继续遍历顶点,同时标记边已经遍历,直到遍...

【专利技术属性】
技术研发人员:刘圣军刘韬刘新儒
申请(专利权)人:中南大学
类型:发明
国别省市:湖南,43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1