可凹区域的3D快速打印路径规划方法与流程

文档序号:12333987阅读:1022来源:国知局
可凹区域的3D快速打印路径规划方法与流程

本发明涉及3D打印领域,具体而言,涉及可凹区域的3D快速打印路径规划方法。



背景技术:

3D打印中的路径规划算法就是对切片分层所获得的截面轮廓进行扫描填充,合理的路径规划不仅能够提高3D打印速度,而且还可以节省打印材料。传统的3D打印路径生成算法在处理凹多边形打印区域时可能面临激光中断和继续问题。



技术实现要素:

为了解决现有技术中的上述问题,本发明提出了一个多边形打印区域的顺时针&逆时针双向凸化分割算法(Clockwise and Counterclockwise Two-way Convexify Segment Algorithm,CCTCSA),简称CCTCSA算法。提高了激光器的使用效率,延长了激光器的寿命。

CCTCSA算法的基本思想是将多边形打印区域分割成若干个非凹的凸形区域,以此避开多边形打印区域路径规划时可能面临的激光中断和继续问题。

为此,本发明提供一种可凹区域的3D快速打印路径规划方法,包括下列步骤:

步骤1.任意选取区域边界上的一点A作为凸化边界边起始搜索节点;

步骤2.初始化存储“头尾节点”和“头尾边界边”的两个双向队列,队头节点Hp=A,队尾节点Rp=A,队头边界边He=null,队尾边界边Re=null;

步骤3.沿着区域边界的“顺时针”方向进行凸化边界搜索,将顺时针方向的下一个边界点记为P,判断点P是否符合凸化边界条件,如果是,则更新所述两个双向队列,将点P作为顺时针方向的下一个凸化边界边节点,重复步骤3,否则,进行到步骤4;

步骤4.沿着区域边界的“逆时针”方向进行凸化边界搜索,将逆时针方向的下一个边界点记为Q,判断点Q是否符合凸化边界条件,如果是,则更新所述两个双向队列,将点Q作为逆时针方向的下一个凸化边界边节点,重复步骤4,否则,进行到步骤5;

步骤5.判断队头节点和队尾节点是否相同,如果不同,则连接队头节点Hp和队尾节点Rp作为下一轮凸化边界边搜索的起始搜索边界边,将这两个节点作为下一轮凸化边界边搜索的头尾节点,初始化所述两个双向队列,返回到步骤3。

优选地,点P符合凸化边界的条件如下:

队尾边界边Re为空或点P在队尾边界边的右侧,并且

队头边界边He为空或点P在队头边界边的左侧,并且

队头节点Hp在队尾节点Rp和点P形成的连线的右边。

优选地,点Q符合凸化边界的条件如下:

队头边界边He为空或点P在队头边界边反向边的左侧,并且

队尾边界边Re为空或点P在队尾边界边的右侧,并且

队尾节点Rp在队头节点Hp和点P形成的连线的左边。

优选地,令点P或点Q的坐标为P(x,y),则根据如下步骤来判断点P(x,y)是在有向线段的左侧还是右侧:

计算由P(x,y),A(x1,y1),B(x2,y2)组成的两个向量和的叉积υ(P,A,B)若υ>0,则所述点在有向线段的右侧;若υ<0,则所述点在有向线段的左侧;若υ=0,则所述点与有向线段共线。

优选地,所述叉积υ(P,A,B)的计算公式如下:

υ(P,A,B)=(x-x1)×(y2-y1)-(x2-x1)×(y-y1)。

附图说明

将参考附图中所说明的示范性的实施例而在下文中更详细地解释本发明。

图1是CCTCSA算法的处理流程图。

图2是以A为起点进行多边形打印区域的凸化边界搜索过程图。

图3示出了多边形打印区域的另一个凸化边界“EHGFE"。

具体实施方式

图1示出了CCTCSA算法进行打印区域多边形的凸化分割流程。其中,CCTCSA算法将可能为凹的多边形打印区域转变为一系列凸形区域的方法是:

首先,任意选取区域边界上的一点作为凸化边界搜索的起始点,初始化存储起止边界点和起止边界边的两个双端队列Hp,Rp,He,Re。

然后,沿着打印区域多边形的边界“顺时针”方向进行凸化边界搜索,采用贪心策略,直到不满足条件的边界点出现或搜索结束;

紧接着,采用贪心策略,沿着打印区域多边形的边界“逆时针”方向进行凸化边界搜索,直到不满足条件的边界点出现或搜索结束;

最后,根据起止边界点是否相同,判断打印区域多边形的边界凸化过程是否结束。若是,则结束算法;否则,连接队头和队尾边界点,形成下一轮搜索的起始条件,进行下一轮边界凸化。

以图2所示的多边形打印区域为例,若以A为起始搜索点、且先沿着打印区域多边形边界顺时针方向进行搜索,后沿着打印区域多边形边界逆时针方向进行搜索,则多边形打印区域的双向凸化分割过程如图2所示。

初始时刻队头边界点为Head-PNT=A,队尾边界点为Rear-PNT=A,队头边界边为Head-EDGE=null,队尾边界边为Rear-EDGE=null,如图2(1)所不。

步骤1:采用贪心策略,沿着顺时针方向进行凸化边界搜索。如图2(2~5)所示。

步骤1.1:获得顺时针方向的第一个边界顶点K,形成第一条边界边并更新队头边界点Head-PNT、队尾边界点Rear-PNT,队头边界边Head-EDGE,队尾边界边Rear-EDGE,使得Head-PNT=A,Rear-PNT=K,如图2(2)所示。

步骤1.2:循环。沿着顺时针方向寻找凸化边界点,直到碰到不满足条件的边界点或边界点搜索结束。如图2(2~5)所示。

首先,找到边界点J,判断:(1)点J是否在当前队尾边界边的右侧(顺时针方向)?(2)点J是否在队头边的反向边的左侧(逆时针方向)?(3)队头边界点Head-PNT=A是否在形成的边界边的右侧(顺时针方向)?因为三个条件皆成立,因此,点J符合凸化边界条件,为下一条凸边界边,并更新队尾边界点Rear-PNT=J和队尾边界边如图2(3)所示。

然后,找到边界点H,判断:(1)点H是否在当前队尾边界边的右侧(顺时针方向)?(2)点H是否在队头边的反向边的左侧(逆时针方向)?(3)队头边界点Head-PNT=A是否在形成的边界边的右侧(顺时针方向)?因为三个条件皆成立,因此,点H符合凸化边界条件,为下一条凸边界边,并更新队尾边界点Rear-PNT=H和队尾边界边如图2(4)所示。

紧接着,找到边界点G,判断:(1)点G是否在当前队尾边界边的右侧(顺时针方向)?(2)点G是否在队头边的反向边的左侧(逆时针方向)?(3)队头边界点Head-PNT=A是否在形成的边界边的右侧(顺时针方向)?由于条件(1)不成立,即边界点G在当前队尾边界边的左侧,不构成凸化边界,且边界点G不是队头边界点Head-PNT=A,因此结束顺时针方向的边界点搜索,进入下一步骤“逆时针方向的凸化边界点搜索”。如图2(5)所示。

步骤2:采用贪心策略,沿着逆时针方向进行凸化边界搜索。如图2(6~10)所示。

步骤2.1:循环。沿着逆时针方向寻找凸化边界点,直到碰到不满足条件的边界点或边界点搜索结束。如图2(6~10)所示。

首先,找到边界点B,判断:(1)点B是否在当前队头边界边反向边的左侧(逆时针方向)?(2)点B是否在当前队尾边界边的右侧(顺时针方向)?(3)队尾边界点Rear-PNT=H是否在形成的边界边的左侧(逆时针方向)?因为三个条件皆成立,因此,点B符合凸化边界条件,为下一条凸化边界边,并更新队头边界点Head-PNT=B和队头边界边如图2(6)所示。

然后,找到边界点C,判断:(1)点C是否在当前队头边界边反向边的左侧(逆时针方向)?(2)点C是否在当前队尾边界边的右侧(顺时针方向)?(3)队尾边界点Rear-PNT=H是否在形成的边界边的左侧(逆时针方向)?因为三个条件皆成立,因此,点C符合凸化边界条件,为下一条凸化边界边,并更新队头边界点Head-PNT=C和队头边界边如图2(7)所示。

紧接着,找到边界点D,判断:(1)点D是否在当前队头边界边反向边的左侧(逆时针方向)?(2)点D是否在当前队尾边界边的右侧(顺时针方向)?(3)队尾边界点Rear-PNT=H是否在形成的边界边的左侧(逆时针方向)?因为三个条件皆成立,因此,点D符合凸化边界条件,为下一条凸化边界边,并更新队头边界点Head-PNT=D和队头边界边如图2(8)所示。

再者,找到边界点E,判断:(1)点E是否在当前队头边界边反向边的左侧(逆时针方向)?(2)点E是否在当前队尾边界边的右侧(顺时针方向)?(3)队尾边界点Rear-PNT=H是否在形成的边界边的左侧(逆时针方向)?因为三个条件皆成立,因此,点E符合凸化边界条件,为下一条凸化边界边,并更新队头边界点Head-PNT=E和队头边界边如图2(9)所示。

最后,找到边界点F,判断:(1)点F是否在当前队头边界边反向边的左侧(逆时针方向)?(2)点F是否在当前队尾边界边的右侧(顺时针方向)?(3)队尾边界点Rear-PNT=H是否在形成的边界边的左侧(逆时针方向)?因为条件(1)成立、条件(2)不成立,因此,点F不符合凸化边界条件,不是下一条凸化边界边,逆时针凸化边界搜索结束。如图2(10)所示。

步骤3:顺时针和逆时针凸化边界搜索都结束后,若队头节点E和队尾节点H不相同,则连接E和H两个节点,形成一个局部凸化边界。如图2(11)所示。

经过上述步骤1~3之后,因为寻找到的凸化边界的起始节点分别为E和H,不相同。因此,连接E和H两个节点形成一个局部凸化边界。之后,以凸化边界为队头边界边,开始新一轮的凸化边界搜索,便可找到下一个凸化边界EHGF。如图3所示,具体过程在此省略。

CCTCSA算法实现的核心步骤和伪代码如以下清单。

CCTCSA算法使用到的核心操作是:判断点P(x,y)是在有向线段的左侧?还是右侧?其原理是计算三个点P(x,y),A(x1,y1),B(x2,y2)组成的2个向量和的叉积υ(P,A,B)。若υ>0,则点P在有向线段的右侧;若υ<0,则点P在有向线段的左侧;若υ=0,则点P与有向线段共线。其中,叉积υ(P,A,B)的计算公式如下:

υ(P,A,B)=(x-x1)×(y2-y1)-(x2-x1)×(y-y1)

对于规模为n的打印区域多边形,因为CCTCSA算法在进行边界凸化时每个边界节点只搜索一次,核心计算时间是判断点与边界边之间的左右侧向(顺逆时针方向)关系,由于叉积υ的计算可以视为常量时间,因此,规模为n的打印区域多边形的边界凸化的时间复杂度为O(n),而打印路径规划所使用的核心算法为经典的方法,可见CCTCSA算法的时间复杂度与经典的路径规划算法一样。

上面结合附图和实施例对本发明做了详细的说明。但是,应当理解,本发明的实施例并不限于所公开的特定实施例,并且对该实施例的修改和其他实施例也意图被包含在所附权利要求书的范围内。尽管此处使用了特定术语,但是它们仅在通用和描述性意义上使用,而非为了限制的目的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1