三维模型的碰撞检测方法及系统
技术领域
本发明涉及计算机数据处理技术领域,特别是涉及三维模型的碰撞检测方法及系统。
背景技术
增材制造(AdditiveManufacturing,AM)技术是采用材料逐渐累加的方法制造实体零件的技术,相对于传统的材料去除-切削加工技术,是一种“自下而上”的制造方法。现有的三维打印(3DPrinting),又称3D打印,即是表达了这一技术的特点。
增材制造是以数字模型为基础,通过计算机控制将材料逐层堆积制造出三维物体。其中,碰撞检测是三维物体建造前的重要环节,它的核心任务是检测在规定的范围内两个或多个物体之间是否发生接触或进入。
在一次增材制造建造过程中,为了提高打印效率,一般会同时打印多个待打印三维物体制件(以下简称模型),而在打印之前,需要检测多个模型之间是否存在碰撞,而多个模型之间是否存在碰撞可通过检测任两个模型之间是否存在碰撞而判断,当任两个模型之间存在碰撞,则说明待打印三维物体制件之间存在碰撞,不宜打印。
在3D打印领域,现有的碰撞检测都是基于三维几何模型的三角形碰撞检测,该检测方法的核心是检测三维物体的本体碰撞情况,检测算法复杂度较高。并且,在增材制造中,为了确保制件质量,选区激光熔化(SLM)、立体光固化(SLA)等技术还需要在建造过程中构建支撑。如图1所示,两物体在生成支撑结构时有可能会将第二个模型覆盖,影响打印。然而现有的基于三维几何模型的碰撞检测并不包含对支撑因素的考虑,不能检测到支撑的覆盖问题,导致检测精确不够理想。
发明内容
基于此,本发明提供的三维模型的碰撞检测方法及系统,能够提高三维模型的碰撞检测精度,简化算法复杂度,提高检测效率。
本发明采用以下技术方案:
本发明一方面提供三维模型的碰撞检测方法,包括:
将待检测的两个三维STL模型在XOY平面进行投影,得到对应的两个二维图形;
判断所述两个二维图形是否相交或者为包含关系,若相交或者为包含关系,确定为所述两个三维STL模型存在碰撞。
优选的,所述判断所述两个二维图形是否相交或者为包含关系之后,还包括,
若不相交且不为包含关系,计算所述两个二维图形的最短距离;若所述最短距离小于设定限定值,确定为所述两个三维STL模型存在碰撞。
优选的,计算所述两个二维图形的最短距离,包括,
识别所述两个二维图形是否均为凸多边形,若是,通过旋转卡壳算法得出所述两个二维图形的最短距离;
若否,将其中为凹多边形的二维图形分解为若干凸多边形;
通过旋转卡壳算法计算分别属于所述两个二维图形的任意两个凸多边形之间的最短距离,找出其中距离最小值作为所述两个二维图形的最短距离。
优选的,判断所述两个二维图形是否相交或者为包含关系,若是,确定为所述两个三维STL模型存在碰撞,包括,
判断所述两个二维图形是否相交,若是,确定为所述两个三维STL模型存在碰撞;
若否,判断所述两个二维图形是否为包含关系,若是,确定为所述两个三维STL模型存在碰撞。
优选的,判断所述两个二维图形是否相交,包括,
分别识别构成所述两个二维图形的全部边;
判断其中一个二维图形的各边是否与另一个二维图形的任意边均不相交;
若是,确定为所述两个二维图形不相交,否则,确定为所述两个二维图形相交。
优选的,判断其中一个二维图形的各边是否与另一个二维图形的任意边均不相交,包括,
构建与其中一个二维图形的第一边对应的第一矩形,构建与另一个二维图形的第二边对应的第二矩形,所述第一边为所述第一矩形的对角线,所述第二边为所述第二矩形的对角线;
判断所述第一矩形与所述第二矩形是否相交,若不相交,确定为所述第一边与所述第二边不相交;
若所述第一矩形与所述第二矩形相交,则判断所述第一边与所述第二边是否相互跨立,若是,确定为所述第一边与所述第二边不相交。
优选的,所述判断所述两个二维图形是否为包含关系,包括,
判断其中一个二维图形的任一顶点是否在另一个二维图形内,若是,所述两个二维图形为包含关系。
本发明另一方面提供三维模型的碰撞检测系统,包括:
投影模块,用于将待检测的两个三维STL模型在XOY平面进行投影,得到对应的两个二维图形;
第一检测模块,用于判断所述两个二维图形是否相交或者为包含关系,若相交或者为包含关系,确定为所述两个三维STL模型存在碰撞。
优选的,还包括:
第二检测模块,用于若所述两个二维图形不相交且不为包含关系,计算所述两个二维图形的最短距离;若所述最短距离小于设定限定值,确定为所述两个三维STL模型存在碰撞。
优选的,计算所述两个二维图形的最短距离,包括,
识别所述两个二维图形是否均为凸多边形,若是,通过旋转卡壳算法得出所述两个二维图形的最短距离;
若否,将其中为凹多边形的二维图形分解为若干凸多边形;
通过旋转卡壳算法计算分别属于所述两个二维图形的任意两个凸多边形之间的最短距离,找出其中距离最小值作为所述两个二维图形的最短距离。
优选的,所述第一检测模块包括,
相交检测单元,用于判断所述两个二维图形是否相交,若是,确定为所述两个三维STL模型存在碰撞;
包含检测单元,用于若所述两个二维图形不相交,判断所述两个二维图形是否为包含关系,若是,确定为所述两个三维STL模型存在碰撞;
其中,判断所述两个二维图形是否相交,包括,
分别识别构成所述两个二维图形的全部边;
判断其中一个二维图形的各边是否与另一个二维图形的任意边均不相交;
若是,确定为所述两个二维图形不相交,若否,确定为所述两个二维图形相交;
所述判断所述两个二维图形是否为包含关系,包括,
判断其中一个二维图形的任一顶点是否在另一个二维图形内,若是,所述两个二维图形为包含关系。
实施本发明的上述技术方案的有益效果包括:通过将待检测的三维STL模型在XOY平面进行投影,得到对应的二维图形;判断得到的二维图形之间是否相交或者为包含关系,若相交或者为包含关系,则确定为所述两个三维STL模型存在碰撞。由此即将三维模型的碰撞检测转换为二维图形的碰撞检测,有利于提高三维模型的碰撞检测精度,简化算法复杂度,提高检测效率。
附图说明
图1为增材制造过程中两物体生成支撑结构的效果示意图;
图2为实施例一的三维模型的碰撞检测方法的示意性流程图;
图3为二维凹包的创建效果示意图;
图4为实施例二的三维模型的碰撞检测方法的示意性流程图;
图5为两个凹包的最短距离的示意图;
图6为凹多边形凸分解的效果示意图;
图7为实施例三的三维模型的碰撞检测系统的示意性结构图;
图8为实施例四的三维模型的碰撞检测系统的示意性结构图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供的实施例包括三维模型的碰撞检测方法实施例,还包括三维模型的碰撞检测系统实施例。以下分别进行详细说明。
实施例一:
图2为实施例一的三维模型的碰撞检测方法的示意性流程图。如图2中所示,本实施例的三维模型的碰撞检测方法包括以下步骤S101和S102,详细说明如下:
S101,将待检测的两个三维STL模型在XOY平面进行投影,得到对应的两个二维图形;
本实施例中,STL是快速原型系统所应用的标准文件类型,STL模型只能用来表示封闭的面或者体,三维STL模型是指用三角网格来表现3DCAD模型。
其中,XOY平面指的是基于X、Y坐标系的二维平面,O点标识X、Y坐标系的原点位置。将待检测的两个三维STL模型分别在XOY平面进行投影,可得到对应的两个二维图形(二维图形A和二维图形B)。需要说明的是,得到的二维图形可为任意多边形或其他形状,其具体是根据三维STL模型的形状而定。
S102,判断所述两个二维图形是否相交或者为包含关系,若相交或者为包含关系,确定为所述两个三维STL模型存在碰撞;
优选的,可先判断二维图形A和二维图形B是否相交,若相交,可直接确定为两个三维STL模型存在碰撞;若不相交,再进一步判断所述两个二维图形是否为包含关系,若为包含关系,仍然确定为所述两个三维STL模型存在碰撞。
作为一优选实施方式,判断二维图形A和二维图形B是否相交的方法可为:分别识别构成二维图形A和二维图形B的全部边,判断二维图形A的各边是否与二维图形B的任意边均不相交;若二维图形A的各边与二维图形B的任意边均不相交,则确定这两个二维图形不相交,若检测到二维图形A的某一边与二维图形B的任一边相交,则确定为这两个二维图形相交。
本实施例中,以两个二维图形不相交为前提,在此前提之下进一步判断这两个二维图形是否为包含关系,由此可简化判断是否为包含关系的算法难度。具体如:在两个二维图形不相交的前提下,只需要判断其中一个二维图形的一个点是否落在另一个二维图形里面即可。具体实现方法可为,采用射线法从其中一个二维图形中的目标点引出一条射线,检测该条射线与另一个二维图形的边的交点数目,若为奇数个交点,则表明所述目标点在另一个二维图形的内部,否则在另一个二维图形的外部。
优选的,可将二维图形的任一顶点作为目标点,判断其中一个二维图形的任一顶点是否在另一个二维图形内,若是,则所述两个二维图形为包含关系。
在一次增材制造建造过程中,打印之前通过上述的三维模型的碰撞检测方法检测任两个三维STL模型之间是否存在碰撞而判断。若两个二维图形不相交且不为包含关系,可确定为对应的两个三维STL模型不存在碰撞。若多个三维STL模型中任意两个模型均不存在碰撞,表明所述多个三维STL模型不存在碰撞,可以打印。若检测到某两个三维STL模型之间存在碰撞,则表明所述多个三维STL模型存在碰撞,不宜同时打印。
需要说明的是,当上述的二维图形为多边形时,可分为凹多边形(简称凹包)和凸多边形(简称凸包)两种情况。其中凹包是指点集包含的最小多边形,使每个点或者在其边上或者在其内部,且至少有一个角大于180度;凸包是指点集包含的最小多边形,使每个点或者在其边上或者在其外部,且所有角均小于180度。
下面以凹包为例,详细描述判断两个二维图形相交或为包含关系的具体实现方法:
1、采用Graham’sscan算法的衍生方法来判断A与B两个二维图形是否相交,先通过如下步骤得出待判断的两个二维凹包:
1)基于XOY平面,找到一个y点最低或者最左的点作为起始点;
2)求出一个合适的R领域,给定一个限制值;
3)根据极坐标对点以行进行排序;
4)在所述R领域内,采用滚球法对起始点旁边的点进行扫描,找到合适的多边形顶点,最后得出二维凹包,效果如图3。
进一步的,是判断两个二维凹包是否相交。假设构成二维凹包A的边数为m,构成二维凹包B的边数为p,将判断多边形凹包相交的问题转换成判断两线段有无相交的问题,对应的算法复杂度为m×p。假设凹包A中的一边的两端点为p1和p2,凹包B中的一边的两端点为q1和q2,判断两线段是否相交需要通过两步实现:
1)排斥试验
构建与其中一个二维图形的第一边对应的第一矩形,构建与另一个二维图形的第二边对应的第二矩形,所述第一边为所述第一矩形的对角线,所述第二边为所述第二矩形的对角线;若所述第一矩形与所述第二矩形不相交,则可确定所述第一边与所述第二边不相交。
具体如:构建线段p1p2为矩形r的对角线,构建线段q1q2为矩形t的对角线,判断r与t是否相交;若r与t不相交,则确定线段p1p2、线段q1q2不相交。
2)跨立试验
在排斥试验基础上,为了进一步提高判断的准确性,还需判断两条边是否互相跨立对方,尤其是当所述第一矩形与所述第二矩形不相交的情况下,可能存第一边与第二边跨立的情况,此种情况也应当确定为第一边与所述第二边不相交。
具体如:若通过上述方法判断出r与t相交,进一步判断线段p1p2、线段q1q2是否互相跨立对方,判断依据可为:
如果线段p1p2跨立线段q1q2跨立,则有:
(p1-q1)×(q2-q1)*(q2-q1)×(p2-q1)>=0;
同理,如果线段q1q2跨立线段p1p2,则有:
(q1-p1)×(p2-p1)*(p2-p1)×(q2-p1)>=0。
可以理解的是,二维凸包的情况和上述凹包的判断原理相同,不作赘述。
根据本发明的上述实施例一的三维模型的碰撞检测方法,通过将待检测的两个三维STL模型在XOY平面进行投影,得到对应的两个二维图形;判断所述两个二维图形是否相交或者为包含关系,若相交或者为包含关系,确定为所述两个三维STL模型存在碰撞;即将三维碰撞检测转换为二维图形的碰撞检测,可提高三维模型的碰撞检测精度,简化算法复杂度,提高检测效率。
实施例二:
图4为实施例二的三维模型的碰撞检测方法的示意性流程图。实施例二与上述实施例一的主要区别包括:对于包含支撑结构的增材制造,由于三维模型在空间内的摆放较为紧凑,即使多个三维模型的二维投影既不相交也不为包含关系,依然存在碰撞的可能性。因此,本实施例在实施例一的基础上,还增加了距离的限定,以进一步提高三维模型碰撞检测的精确度。
如图4中所示,本实施例的三维模型的碰撞检测方法包括以下步骤S201至步骤S207,详细说明如下:
S201,将待检测的两个三维STL模型在XOY平面进行投影,得到对应的两个二维图形;
S202,判断所述两个二维图形是否相交;若相交,执行步骤S206,若不相交,执行步骤S203;
S203,判断所述两个二维图形是否为包含关系,若为包含关系,执行步骤S206,否则,执行步骤S204;
S204,计算所述两个二维图形的最短距离;
S205,判断所述最短距离是否小于设定限定值,若是,执行步骤S206,若否,执行步骤S207;
所述限定值可根据用户需求以及设计需要而定,例如可为0.05、0.1等。
S206,确定为所述两个三维STL模型存在碰撞;
S207,确定为所述两个三维STL模型不存在碰撞。
本实施例中,优选采用旋转卡壳方法计算两凸包的最短距离。对于凹包,则需先将其分解为若干凸包。因此,需先识别所述两个二维图形是否均为凸多边形,若是,可直接通过旋转卡壳算法得出所述两个二维图形的最短距离;若否,将其中为凹包的二维图形分解为若干凸包。
优选地,将二维凹包分解进行凸分解可采用Rogers算法实现,过程如下:
1)查找二维凹包的第一个凹点;
2)采用分区域法寻找有效的分割点;
3)通过得出的交点来将该二维凹包分割成多个凸多边形,效果如图6所示。
接下来再基于旋转卡壳的方法计算分别属于所述两个二维图形的任意两个凸多边形之间的最短距离;找出其中距离最小值即为所述两个二维图形的最短距离。具体如:假设第一个凹多边形分解成m个凸多边形,第二个凹多边形分解成n个凸多边形,则计算第一个凹多边形与第二个凹多边形的最短距离的算法复杂度为m×n。分别计算第一个凹多边形中各凸多边形与第二个凹多边形中每个凸多边形的距离,然后比较得到的m×n个距离值,找出其中的距离最小值,即为第一个凹多边形与第二个凹多边形的最短距离。两个凹多边形之间的最短距离如图6所示。
换一种描述即为:如果二维图形A与二维图形B均为凹多边形,将二维图形A分解为m个凸多边形,将二维图形B分解为n个凸多边形,分别求出二维图形A的每一个凸包与二维图形A的每一个凸包的最短距离,得到一组数值,再从这一组数值中找出最小值,即为二维图形A与二维图形B的最短距离。
需说明的是,本发明还可以采用现有技术的其它方式计算二维图形A与二维图形B之间的最短距离,但采用上述凹多边形凸分解的方法把复杂的问题化繁为简,避免出现求凹多边形距离的问题,减小了算法复杂程度。
根据本发明实施例二的三维模型的碰撞检测方法,通过将待检测的两个三维STL模型在XOY平面进行投影,得到对应的两个二维图形;判断所述两个二维图形是否相交或者为包含关系,若相交或者为包含关系,确定为所述两个三维STL模型存在碰撞;若不相交且不为包含关系,计算所述两个二维图形的最短距离;判断所述最短距离是否小于设定限定值,若是,确定为所述两个三维STL模型存在碰撞。由此即将三维碰撞检测转换为二维图形的碰撞检测,进一步提高三维模型的碰撞检测精度,算法复杂度低,检测效率高。
需要说明的是,对于前述的各方法实施例,为了简便描述,将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
以下对可用于执行上述三维模型的碰撞检测方法的本发明三维模型的碰撞检测系统的实施例进行说明。图7、图8为本发明实施例的三维模型的碰撞检测系统的示意性结构图,为了便于说明,图中仅仅示出了与本发明实施例相关的部分,本领域技术人员可以理解,图中示出的系统结构并不构成对系统的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
实施例三:
图7为实施例三的三维模型的碰撞检测系统的示意性结构图,如图7所示,本实施例的三维模型的碰撞检测系统包括:投影模块100和第一检测模块200。其中:
投影模块100,用于将待检测的两个三维STL模型在XOY平面进行投影,得到对应的两个二维图形;具体实施过程参照上述实施所述,不做赘述。
第一检测模块200,用于判断所述两个二维图形是否相交或者为包含关系,若相交或者为包含关系,确定为所述两个三维STL模型存在碰撞。
优选的,所述第一检测模块100具体可包括,
相交检测单元,用于判断所述两个二维图形是否相交,若是,确定为所述两个三维STL模型存在碰撞;
以及,包含检测单元,用于若所述两个二维图形不相交,判断所述两个二维图形是否为包含关系,若为包含关系,确定为所述两个三维STL模型存在碰撞。
作为一优选实施方式,判断两个二维图形是否相交的方式可为:
分别识别构成所述两个二维图形的全部边;判断其中一个二维图形的各边是否与另一个二维图形的任意边均不相交;若是,确定所述两个二维图形不相交,否则,确定为所述两个二维图形相交。
作为一优选实施方式,判断两个二维图形是否为包含关系的方式可为:
判断其中一个二维图形的任一顶点是否在另一个二维图形内,若是,所述两个二维图形为包含关系。
进一步的,上述判断其中一个二维图形的各边是否与另一个二维图形的任意边均不相交的优选方式可包括:
构建与其中一个二维图形的第一边对应的第一矩形,构建与另一个二维图形的第二边对应的第二矩形,所述第一边为所述第一矩形的对角线,所述第二边为所述第二矩形的对角线;
判断所述第一矩形与所述第二矩形是否相交,若不相交,确定为所述第一边与所述第二边不相交;若所述第一矩形与所述第二矩形相交,再进一步判断所述第一边与所述第二边是否相互跨立,若是,确定为所述第一边与所述第二边不相交。具体实施过程参照上述实施所述,不做赘述。
实施例四:
图8为实施例四的三维模型的碰撞检测系统的示意性结构图,如图8所示,本实施例的三维模型的碰撞检测系统与实施例三的主要区别在于,还包括:第二检测模块300,用于若所述两个二维图形不相交且不为包含关系,计算所述两个二维图形的最短距离;若所述最短距离小于设定限定值,则确定为所述两个三维STL模型存在碰撞。
作为一优选实施方式,所述第二检测模块300具体包括距离检测单元和比对单元。其中,
距离检测单元,用于计算所述两个二维图形的最短距离。计算方法可为:
识别所述两个二维图形是否均为凸多边形,若是,通过旋转卡壳算法得出所述两个二维图形的最短距离;若否,将其中为凹多边形的二维图形分解为若干凸多边形;通过旋转卡壳算法计算分别属于所述两个二维图形的任意两个凸多边形之间的最短距离,找出其中距离最小值作为所述两个二维图形的最短距离;具体过程参照上述实施所述,不做赘述。
比对单元,用于判断所述最短距离是否小于设定限定值,若是,确定为所述两个三维STL模型存在碰撞。所述限定值可根据实际情况设定。
根据在上述任一示例的三维模型的碰撞检测系统实施例,可将三维模型的碰撞检测转换为二维图形的碰撞检测,有利于提高三维模型的碰撞检测精度,算法复杂度低,检测效率高。
需要说明的是,上述实施例中各模块/单元之间的信息交互、执行过程等内容,由于与本发明前述方法实施例基于同一构思,其带来的技术效果与本发明前述方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
此外,上述实施例三或实施例四示例的三维模型的碰撞检测系统中,各功能模块的逻辑划分仅是举例说明,实际应用中可以根据需要,例如出于相应硬件的配置要求或者软件的实现的便利考虑,将上述功能分配由不同的功能模块完成,即将所述三维模型的碰撞检测系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
另外,在本发明前述各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。本领域普通技术人员可以理解本发明的任意实施例指定的方法的全部或部分步骤是可以通过程序来指令相关的硬件(个人计算机、服务器、或者网络设备等)来完成。该程序可以存储于一计算机可读存储介质中。该程序在执行时,可执行上述任意实施例指定的方法的全部或部分步骤。前述存储介质可以包括任何可以存储程序代码的介质,例如只读存储器(Read-OnlyMemory,ROM)、随机存取器(RandomAccessMemory,RAM)、磁盘或光盘等。
以上为对本发明所提供的三维模型的碰撞检测方法及系统的描述,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。