CN106127764A - Svg图形碰撞检测方法及装置 - Google Patents

Svg图形碰撞检测方法及装置 Download PDF

Info

Publication number
CN106127764A
CN106127764A CN201610465162.1A CN201610465162A CN106127764A CN 106127764 A CN106127764 A CN 106127764A CN 201610465162 A CN201610465162 A CN 201610465162A CN 106127764 A CN106127764 A CN 106127764A
Authority
CN
China
Prior art keywords
test point
svg
point
polygonal
point set
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610465162.1A
Other languages
English (en)
Other versions
CN106127764B (zh
Inventor
廉帅
马帅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Neusoft Corp
Original Assignee
Neusoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Neusoft Corp filed Critical Neusoft Corp
Priority to CN201610465162.1A priority Critical patent/CN106127764B/zh
Publication of CN106127764A publication Critical patent/CN106127764A/zh
Application granted granted Critical
Publication of CN106127764B publication Critical patent/CN106127764B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/0002Inspection of images, e.g. flaw detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10004Still image; Photographic image

Abstract

本发明公开了一种SVG图形碰撞检测方法及装置。所述方法包括:在第一SVG图形上获取第一检测点集合,所述第一检测点集合用于形成内接于所述第一SVG图形中的第一多边形;在第二SVG图形上获取第二检测点集合,所述第二检测点集合用于形成内接于所述第二SVG图形中的第二多边形;判断所述第一检测点集合中是否包括落入到所述第二多边形的范围内的检测点;在确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。由此,可以提高SVG图形碰撞检测的准确度,能够为基于SVG图形碰撞检测结果进行的后续相关处理提供准确且可靠的决策支持。

Description

SVG图形碰撞检测方法及装置
技术领域
本发明涉及图形碰撞检测领域,具体地,涉及一种SVG图形碰撞检测方法及装置。
背景技术
可缩放矢量图形(SVG,Scalable Vector Graphics)是基于可扩展标记语言(标准通用标记语言的子集)、用于描述二维矢量图形的一种图形格式。在实际应用中,有时需要检测两个SVG图形之间是否发生碰撞。其中,SVG图形发生碰撞的情形可以包括:两个SVG图形相交,或者一个SVG图形内嵌于另一个SVG图形之中。相关技术中,常用的SVG图形碰撞检测方法是矩形检测法。图1示出了这种检测法的示意图。如图1所示,假设要检测SVG图形101和SVG图形102之间是否发生碰撞,则基于矩形检测法,首先获取SVG图形101的外接矩形103和SVG图形102的外接矩形104,通过判断外接矩形103与外接矩形104是否为相交或者内嵌的关系,来确定SVG图形101与SVG图形102之间是否发生碰撞。然而,采用这种矩形检测法,有时会出现误检。例如,如图1所示,外接矩形103与外接矩形104之间相交于A点,通过矩形检测法,得到的结论是SVG图形101与SVG图形102之间发生碰撞。然而实际上,如图1所示,两个SVG图形之间并未发生碰撞。由此可以看出,现有的矩形检测法在SVG图形碰撞检测方面存在准确度不高的问题。
发明内容
本发明的目的是提供一种SVG图形碰撞检测方法及装置,以提高SVG图形碰撞检测的准确度。
为了实现上述目的,本发明提供一种SVG图形碰撞检测方法,所述方法包括:在第一SVG图形上获取第一检测点集合,所述第一检测点集合用于形成内接于所述第一SVG图形中的第一多边形;在第二SVG图形上获取第二检测点集合,所述第二检测点集合用于形成内接于所述第二SVG图形中的第二多边形;判断所述第一检测点集合中是否包括落入到所述第二多边形的范围内的检测点;在确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
可选地,所述在第一SVG图形上获取第一检测点集合的步骤包括:在所述第一SVG图形上获取第一初始位置点;以所述第一初始位置点为起点、按照第一预设步长、沿所述第一SVG图形获取多个第一中间位置点;基于所述第一初始位置点和所述多个第一中间位置点,形成所述第一检测点集合;所述在第二SVG图形上获取第二检测点集合的步骤包括;在所述第二SVG图形上获取第二初始位置点;以所述第二初始位置点为起点、按照第二预设步长、沿所述第二SVG图形获取多个第二中间位置点;基于所述第二初始位置点和所述多个第二中间位置点,形成所述第二检测点集合。
可选地,所述判断所述第一检测点集合中是否包括落入到所述第二多边形的范围内的检测点的步骤包括:遍历所述第一检测点集合,判断是否存在满足第一预设条件的第一检测点,其中,所述第一预设条件为:所述第一检测点所在的水平线在该第一检测点的左侧与所述第二多边形的交点的总数为奇数,且在该第一检测点的右侧与所述第二多边形的交点的总数为奇数;当所述第一检测点集合中存在满足所述第一预设条件的第一检测点时,确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点。
可选地,所述第一检测点所在的水平线在该第一检测点的左侧与所述第二多边形的交点的总数为:所述第二多边形中位于所述第一检测点所在的垂直线的左侧、且位于所述第一检测点所在的水平线的下方的部分与该水平线的交点的总数;以及,所述第一检测点所在的水平线在该第一检测点的右侧与所述第二多边形的交点的总数为:所述第二多边形中位于所述第一检测点所在的垂直线的右侧、且位于所述第一检测点所在的水平线的下方的部分与该水平线的交点的总数。
可选地,所述方法还包括:在确定所述第一检测点集合中不包括落入到所述第二多边形的范围内的检测点时,判断所述第二检测点集合中是否包括落入到所述第一多边形的范围内的检测点;在所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
可选地,所述判断所述第二检测点集合中是否包括落入到所述第一多边形的范围内的检测点的步骤包括:遍历所述第二检测点集合,判断是否存在满足第二预设条件的第二检测点,其中,所述第二预设条件为:所述第二检测点所在的水平线在该第二检测点的左侧与所述第一多边形的交点的总数为奇数,且在该第二检测点的右侧与所述第一多边形的交点的总数为奇数;当所述第二检测点集合中存在满足所述第二预设条件的第二检测点时,确定所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点。
可选地,所述第二检测点所在的水平线在该第二检测点的左侧与所述第一多边形的交点的总数为:所述第一多边形中位于所述第二检测点所在的垂直线的左侧、且位于所述第二检测点所在的水平线的下方的部分与该水平线的交点的总数;所述第二检测点所在的水平线在该第二检测点的右侧与所述第一多边形的交点的总数为:所述第一多边形中位于所述第二检测点所在的垂直线的右侧、且位于所述第二检测点所在的水平线的下方的部分与该水平线的交点的总数。
本发明还提供一种SVG图形碰撞检测装置,所述装置包括:第一获取模块,用于在第一SVG图形上获取第一检测点集合,所述第一检测点集合用于形成内接于所述第一SVG图形中的第一多边形;第二获取模块,用于在第二SVG图形上获取第二检测点集合,所述第二检测点集合用于形成内接于所述第二SVG图形中的第二多边形;第一判断模块,用于判断所述第一检测点集合中是否包括落入到所述第二多边形的范围内的检测点;碰撞检测模块,用于在确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
可选地,所述第一获取模块包括:第一获取子模块,用于在所述第一SVG图形上获取第一初始位置点;第二获取子模块,用于以所述第一初始位置点为起点、按照第一预设步长、沿所述第一SVG图形获取多个第一中间位置点;第一检测点集合形成子模块,用于基于所述第一初始位置点和所述多个第一中间位置点,形成所述第一检测点集合;所述第二获取模块包括;第三获取子模块,用于在所述第二SVG图形上获取第二初始位置点;第四获取子模块,用于以所述第二初始位置点为起点、按照第二预设步长、沿所述第二SVG图形获取多个第二中间位置点;第二检测点集合形成子模块,用于基于所述第二初始位置点和所述多个第二中间位置点,形成所述第二检测点集合。
可选地,所述第一判断模块包括:第一判断子模块,用于遍历所述第一检测点集合,判断是否存在满足第一预设条件的第一检测点,其中,所述第一预设条件为:所述第一检测点所在的水平线在该第一检测点的左侧与所述第二多边形的交点的总数为奇数,且在该第一检测点的右侧与所述第二多边形的交点的总数为奇数;第一确定子模块,用于当所述第一检测点集合中存在满足所述第一预设条件的第一检测点时,确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点。
可选地,所述第一检测点所在的水平线在该第一检测点的左侧与所述第二多边形的交点的总数为:所述第二多边形中位于所述第一检测点所在的垂直线的左侧、且位于所述第一检测点所在的水平线的下方的部分与该水平线的交点的总数;以及,所述第一检测点所在的水平线在该第一检测点的右侧与所述第二多边形的交点的总数为:所述第二多边形中位于所述第一检测点所在的垂直线的右侧、且位于所述第一检测点所在的水平线的下方的部分与该水平线的交点的总数。
可选地,所述装置还包括:第二判断模块,用于在确定所述第一检测点集合中不包括落入到所述第二多边形的范围内的检测点时,判断所述第二检测点集合中是否包括落入到所述第一多边形的范围内的检测点;所述碰撞检测模块还用于在所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
可选地,所述第二判断模块包括:第二判断子模块,用于遍历所述第二检测点集合,判断是否存在满足第二预设条件的第二检测点,其中,所述第二预设条件为:所述第二检测点所在的水平线在该第二检测点的左侧与所述第一多边形的交点的总数为奇数,且在该第二检测点的右侧与所述第一多边形的交点的总数为奇数;第二确定子模块,用于当所述第二检测点集合中存在满足所述第二预设条件的第二检测点时,确定所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点。
可选地,所述第二检测点所在的水平线在该第二检测点的左侧与所述第一多边形的交点的总数为:所述第一多边形中位于所述第二检测点所在的垂直线的左侧、且位于所述第二检测点所在的水平线的下方的部分与该水平线的交点的总数;所述第二检测点所在的水平线在该第二检测点的右侧与所述第一多边形的交点的总数为:所述第一多边形中位于所述第二检测点所在的垂直线的右侧、且位于所述第二检测点所在的水平线的下方的部分与该水平线的交点的总数。
在上述技术方案中,通过在两个SVG图形上分别获取检测点,并利用各个检测点,形成分别内接于两个SVG图形中的两个多边形。通过判断其中一个多边形上的检测点是否落入到另一个多边形的范围内,可以有效确定出两个多边形是否发生相交,进而得出两个SVG图形是否发生碰撞的结论。通过这一方式,可以提高SVG图形碰撞检测的准确度,能够为基于SVG图形碰撞检测结果进行的后续相关处理提供准确且可靠的决策支持。
本发明的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本发明的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明,但并不构成对本发明的限制。在附图中:
图1是矩形检测法示意图;
图2是根据本发明的一实施方式的SVG图形碰撞检测方法的流程图;
图3是根据本发明的一实施方式的SVG图形碰撞检测的场景示意图;
图4至图6是三种确定检测点所在的水平线在该检测点的左侧与多边形之间的交点的总数的场景示意图;
图7是根据本发明的另一实施方式的SVG图形碰撞检测的场景示意图;
图8是根据本发明的另一实施方式的SVG图形碰撞检测方法的流程图;
图9A和图9B是根据本发明的多种实施方式的SVG图形碰撞检测装置的结构框图。
具体实施方式
以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
图2是根据本发明的一种实施方式的SVG图形碰撞检测方法的流程图。如图2所示,该方法可以包括以下步骤。
在步骤201中,在第一SVG图形上获取第一检测点集合,该第一检测点集合用于形成内接于该第一SVG图形中的第一多边形。
在步骤202中,在第二SVG图形上获取第二检测点集合,该第二检测点集合用于形成内接于该第二SVG图形中的第二多边形。
示例地,如图3所示,在第一SVG图形20上获取若干个检测点,例如,检测点201~20n,其中,n为第一SVG图形20上的检测点的总数,这些检测点201~20n形成第一检测点集合。通过将检测点201~20n顺次连接,可以形成内接于第一SVG图形20中的第一多边形40。
另外,在第二SVG图形30上获取若干个检测点,例如,检测点301~30m,其中,m为第二SVG图形30上的检测点的总数,这些检测点301~30m形成第二检测点集合。通过将检测点301~30m顺次连接,可以形成内接于第二SVG图形30中的第二多边形50。
示例地,在一个实施方式中,可以通过以下方式来获取第一检测点集合和第二检测点集合。例如,如图3所示,针对第一检测点集合:首先,在第一SVG图形20上获取第一初始位置点,例如,检测点201,之后,以该第一初始位置点为起点、按照第一预设步长、沿第一SVG图形20获取多个第一中间位置点,例如,检测点202~20n。最后,基于所述第一初始位置点和所述多个第一中间位置点,形成该第一检测点集合。接下来,针对第二检测点集合,采用上述相同的方式,即,首先,在第二SVG图形30上获取第二初始位置点,例如,检测点301,之后,以该第二初始位置点为起点、按照第二预设步长、沿第二SVG图形30获取多个第二中间位置点,例如,检测点302~30m。最后,基于所述第二初始位置点和所述多个第二中间位置点,形成该第二检测点集合。在本发明中,第一预设步长可以与第二预设步长相等,或者也可以不相等,这两者都可以根据实际所需的检测精度来设定。
返回到图2,上述SVG图形碰撞检测方法还可以包括以下步骤。
在步骤203中,判断第一检测点集合中是否包括落入到第二多边形的范围内的检测点。
示例地,可以遍历第一检测点集合中的各个检测点,判断该检测点是否落入到第二多边形的范围内。在确定当前遍历到的检测点落入到第二多边形的范围内时,可以结束上述遍历过程,并得出第一检测点集合中包括落入到第二多边形的范围内的检测点的结论。此外,如果遍历完第一检测点集合中的各个检测点,确定各个检测点均未落入到第二多边形的范围内时,可以得出第一检测点集合中不包括落入到第二多边形的范围内的检测点的结论。
如图3所示,通过步骤203,可以确定出第一检测点集合中的检测点203落入到第二多边形50的范围内。
在步骤204中,在确定第一检测点集合中包括落入到第二多边形的范围内的检测点时,确定第一SVG图形与第二SVG图形之间发生碰撞。示例地,如图3所示,由于第一检测点集合中的检测点203落入到第二多边形50的范围内,因此,可以确定第一SVG图形20与第二SVG图形30之间发生碰撞。
综上,在上述技术方案中,通过在两个SVG图形上分别获取检测点,并利用各个检测点,形成分别内接于两个SVG图形中的两个多边形。通过判断其中一个多边形上的检测点是否落入到另一个多边形的范围内,可以有效确定出两个多边形是否发生相交,进而得出两个SVG图形是否发生碰撞的结论。通过这一方式,可以提高SVG图形碰撞检测的准确度,能够为基于SVG图形碰撞检测结果进行的后续相关处理提供准确且可靠的决策支持。
在具体判断某个检测点是否落入到某个多边形的范围内时,可以采用以下方式,不过应当理解的是,下述方式仅仅是一种示例实施方式,仅用于说明本发明,并不用于限制本发明。
示例地,在判断第一检测点集合中是否包括落入到第二多边形的范围内的检测点时,可以首先遍历该第一检测点集合,判断是否存在满足第一预设条件的第一检测点,其中,该第一预设条件为:第一检测点所在的水平线在该第一检测点的左侧与第二多边形的交点的总数为奇数,且在该第一检测点的右侧与第二多边形的交点的总数为奇数。
下面以图3所示的三个检测点(分别是检测点201、检测点202和检测点203)为例进行说明。首先,当遍历到检测点201时,该检测点201所在的水平线在该检测点201的左侧与第二多边形50的交点的总数为0,且在该检测点201的右侧与第二多边形50的交点的总数为0,不满足上述第一预设条件,因此,该检测点201不为上述第一检测点。接下来,当遍历到检测点202时,同理,该检测点202所在的水平线在该检测点202的左侧与第二多边形50的交点的总数为0,且在该检测点202的右侧与第二多边形50的交点的总数为0,不满足上述第一预设条件,因此,该检测点202不为上述第一检测点。继续遍历,当遍历到检测点203时,该检测点203所在的水平线在该检测点203的左侧与第二多边形50的交点的总数为1,且在该检测点203的右侧与第二多边形50的交点的总数为1,满足上述第一预设条件,因此,该检测点203为上述第一检测点。
当确定第一检测点集合中存在满足上述第一预设条件的第一检测点时,确定该第一检测点集合中包括落入到第二多边形的范围内的检测点。并且,可选地,可以跳出上述遍历过程,不再对其他检测点进行判断,并执行步骤204,直接得出第一SVG图形20与第二SVG图形30之间发生碰撞的结论。
示例地,第一检测点所在的水平线在该第一检测点的左侧与第二多边形的交点的总数为:第二多边形中位于第一检测点所在的垂直线的左侧、且位于第一检测点所在的水平线的下方的部分与该水平线的交点的总数。此外,第一检测点所在的水平线在该第一检测点的右侧与第二多边形的交点的总数为:第二多边形中位于第一检测点所在的垂直线的右侧、且位于第一检测点所在的水平线的下方的部分与该水平线的交点的总数。
图4至图6示出了三种确定检测点所在的水平线在该检测点的左侧与多边形之间的交点的总数的场景示意图。首先,如图4至图6所示,检测点60所在的垂直线如虚线70所示,该检测点60所在的水平线如虚线80所示。如图4所示,多边形90中位于检测点60所在的垂直线的左侧、且位于检测点60所在的水平线的下方的部分总共包括三条边线,分别是边线901、边线902和边线903。确定检测点60所在的水平线与这些边线之间的交点总数,例如,如图3所示,交点总数为1。
此外,如图5所示,多边形90中位于检测点60所在的垂直线的左侧、且位于检测点60所在的水平线的下方的部分总共包括三条边线,分别是边线901、边线902和边线903。确定检测点60所在的水平线与这些边线之间的交点总数,例如,如图5所示,交点总数为1。由于选择了多边形90中位于检测点60所在的垂直线的左侧、且位于检测点60所在的水平线的下方的部分,因此,即便是多边形90中位于检测点60所在的水平线的上方的边线904和边线905与该检测点60所在的水平线之间相交,在确定该检测点60所在的水平线在该检测点60的左侧与多边形90之间的交点的总数时,该相交情况也不予考虑,即,算作是此处没有交点。
此外,如图6所示,多边形90中位于检测点60所在的垂直线的左侧、且位于检测点60所在的水平线的下方的部分总共包括三条边线,分别是边线901、边线902和边线903。确定检测点60所在的水平线与这些边线之间的交点总数,例如,如图6所示,交点总数为3。在该示例中,边线902与该水平线的交点和边线903与该水平线的交点重合,此时,此处算作具有两个交点。
虽然上面以图4至图6为例描述了如何确定检测点所在的水平线在该检测点的左侧与多边形的交点的总数的实施方式,不过应当理解的是,确定检测点所在的水平线在该检测点的右侧与多边形的交点的总数的实施方式与之相同,因此,本发明不再进行赘述。
在实际情况中,除了如图3所示的两个SVG图形之间发生碰撞是由于这两个SVG图形之间相交的场景之外,两个SVG图形之间发生碰撞还存在另一种场景,即,其中一个SVG图形内嵌于另一个SVG图形之中,如图7所示的场景。在这种情况下,第一SVG图形20上的检测点没有位于内接于第二SVG图形30中的第二多边形50的范围内的,如果仅通过判断第一SVG图形20上的第一检测点集合中是否包括落入到第二多边形50的范围内的检测点,来做出关于两个SVG图形是否发生碰撞的结论,针对此种场景,可能会做出误判。因此,在本发明的另一个实施方式中,如图8所示,上述SVG图形碰撞检测方法还可以包括以下步骤。
在步骤205中,在确定第一检测点集合中不包括落入到第二多边形的范围内的检测点时,判断第二检测点集合中是否包括落入到第一多边形的范围内的检测点。
示例地,可以遍历第二检测点集合中的各个检测点,判断该检测点是否落入到第一多边形的范围内。在确定当前遍历到的检测点落入到第一多边形的范围内时,可以结束上述遍历过程,并得出第二检测点集合中包括落入到第一多边形的范围内的检测点的结论。此外,如果遍历完第二检测点集合中的各个检测点,确定各个检测点均未落入到第一多边形的范围内时,可以得出第二检测点集合中不包括落入到第一多边形的范围内的检测点的结论。
在步骤206中,在确定第二检测点集合中包括落入到第一多边形的范围内的检测点时,确定第一SVG图形与第二SVG图形之间发生碰撞。否则,确定第一SVG图形与第二SVG图形之间未发生碰撞。
通过这一实施方式,可以有效且准确地检测出当一个SVG图形内嵌于另一个SVG图形中时,两个SVG图形发生碰撞的情况,从而可以进一步提高碰撞检测的准确度。
示例地,同上面描述的如何判断第一检测点集合中是否包括落入到第二多边形的范围内的实施方式相类似,在判断第二检测点集合中是否包括落入到第一多边形的范围内的检测点时,可以采用如下方式:
遍历第二检测点集合,判断是否存在满足第二预设条件的第二检测点,其中,该第二预设条件为:第二检测点所在的水平线在该第二检测点的左侧与第一多边形的交点的总数为奇数,且在该第二检测点的右侧与第一多边形的交点的总数为奇数。当第二检测点集合中存在满足第二预设条件的第二检测点时,确定第二检测点集合中包括落入到第一多边形的范围内的检测点。
此外,第二检测点所在的水平线在该第二检测点的左侧与第一多边形的交点的总数可以为:第一多边形中位于第二检测点所在的垂直线的左侧、且位于第二检测点所在的水平线的下方的部分与该水平线的交点的总数。并且,第二检测点所在的水平线在该第二检测点的右侧与第一多边形的交点的总数可以为:第一多边形中位于第二检测点所在的垂直线的右侧、且位于第二检测点所在的水平线的下方的部分与该水平线的交点的总数。
图9A和图9B是根据本发明的多种实施方式的SVG图形碰撞检测装置900的结构框图。如图9A所示,该装置900可以包括:第一获取模块901,用于在第一SVG图形上获取第一检测点集合,所述第一检测点集合用于形成内接于所述第一SVG图形中的第一多边形;第二获取模块902,用于在第二SVG图形上获取第二检测点集合,所述第二检测点集合用于形成内接于所述第二SVG图形中的第二多边形;第一判断模块903,用于判断所述第一检测点集合中是否包括落入到所述第二多边形的范围内的检测点;碰撞检测模块904,用于在确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
在上述技术方案中,通过在两个SVG图形上分别获取检测点,并利用各个检测点,形成分别内接于两个SVG图形中的两个多边形。通过判断其中一个多边形上的检测点是否落入到另一个多边形的范围内,可以有效确定出两个多边形是否发生相交,或者是否其中一个内嵌于另一个中,进而得出两个SVG图形是否发生碰撞的结论。通过这一方式,可以提高SVG图形碰撞检测的准确度,能够为基于SVG图形碰撞检测结果进行的后续相关处理提供准确且可靠的决策支持。
可选地,所述第一获取模块901可以包括:第一获取子模块,用于在所述第一SVG图形上获取第一初始位置点;第二获取子模块,用于以所述第一初始位置点为起点、按照第一预设步长、沿所述第一SVG图形获取多个第一中间位置点;第一检测点集合形成子模块,用于基于所述第一初始位置点和所述多个第一中间位置点,形成所述第一检测点集合;所述第二获取模块802可以包括;第三获取子模块,用于在所述第二SVG图形上获取第二初始位置点;第四获取子模块,用于以所述第二初始位置点为起点、按照第二预设步长、沿所述第二SVG图形获取多个第二中间位置点;第二检测点集合形成子模块,用于基于所述第二初始位置点和所述多个第二中间位置点,形成所述第二检测点集合。
可选地,所述第一判断模块903可以包括:第一判断子模块,用于遍历所述第一检测点集合,判断是否存在满足第一预设条件的第一检测点,其中,所述第一预设条件为:所述第一检测点所在的水平线在该第一检测点的左侧与所述第二多边形的交点的总数为奇数,且在该第一检测点的右侧与所述第二多边形的交点的总数为奇数;第一确定子模块,用于当所述第一检测点集合中存在满足所述第一预设条件的第一检测点时,确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点。
可选地,所述第一检测点所在的水平线在该第一检测点的左侧与所述第二多边形的交点的总数为:所述第二多边形中位于所述第一检测点所在的垂直线的左侧、且位于所述第一检测点所在的水平线的下方的部分与该水平线的交点的总数;以及,所述第一检测点所在的水平线在该第一检测点的右侧与所述第二多边形的交点的总数为:所述第二多边形中位于所述第一检测点所在的垂直线的右侧、且位于所述第一检测点所在的水平线的下方的部分与该水平线的交点的总数。
可选地,如图9B所示,所述装置900还可以包括:第二判断模块905,用于在确定所述第一检测点集合中不包括落入到所述第二多边形的范围内的检测点时,判断所述第二检测点集合中是否包括落入到所述第一多边形的范围内的检测点。在这种情况下,所述碰撞检测模块904还可以用于在所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
可选地,所述第二判断模块905可以包括:第二判断子模块,用于遍历所述第二检测点集合,判断是否存在满足第二预设条件的第二检测点,其中,所述第二预设条件为:所述第二检测点所在的水平线在该第二检测点的左侧与所述第一多边形的交点的总数为奇数,且在该第二检测点的右侧与所述第一多边形的交点的总数为奇数;第二确定子模块,用于当所述第二检测点集合中存在满足所述第二预设条件的第二检测点时,确定所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点。
可选地,所述第二检测点所在的水平线在该第二检测点的左侧与所述第一多边形的交点的总数为:所述第一多边形中位于所述第二检测点所在的垂直线的左侧、且位于所述第二检测点所在的水平线的下方的部分与该水平线的交点的总数;所述第二检测点所在的水平线在该第二检测点的右侧与所述第一多边形的交点的总数为:所述第一多边形中位于所述第二检测点所在的垂直线的右侧、且位于所述第二检测点所在的水平线的下方的部分与该水平线的交点的总数。
以上结合附图详细描述了本发明的优选实施方式,但是,本发明并不限于上述实施方式中的具体细节,在本发明的技术构思范围内,可以对本发明的技术方案进行多种简单变型,这些简单变型均属于本发明的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。
此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明的思想,其同样应当视为本发明所公开的内容。

Claims (10)

1.一种SVG图形碰撞检测方法,其特征在于,所述方法包括:
在第一SVG图形上获取第一检测点集合,所述第一检测点集合用于形成内接于所述第一SVG图形中的第一多边形;
在第二SVG图形上获取第二检测点集合,所述第二检测点集合用于形成内接于所述第二SVG图形中的第二多边形;
判断所述第一检测点集合中是否包括落入到所述第二多边形的范围内的检测点;
在确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
2.根据权利要求1所述的方法,其特征在于,所述在第一SVG图形上获取第一检测点集合的步骤包括:
在所述第一SVG图形上获取第一初始位置点;
以所述第一初始位置点为起点、按照第一预设步长、沿所述第一SVG图形获取多个第一中间位置点;
基于所述第一初始位置点和所述多个第一中间位置点,形成所述第一检测点集合;
所述在第二SVG图形上获取第二检测点集合的步骤包括;
在所述第二SVG图形上获取第二初始位置点;
以所述第二初始位置点为起点、按照第二预设步长、沿所述第二SVG图形获取多个第二中间位置点;
基于所述第二初始位置点和所述多个第二中间位置点,形成所述第二检测点集合。
3.根据权利要求1所述的方法,其特征在于,所述判断所述第一检测点集合中是否包括落入到所述第二多边形的范围内的检测点的步骤包括:
遍历所述第一检测点集合,判断是否存在满足第一预设条件的第一检测点,其中,所述第一预设条件为:所述第一检测点所在的水平线在该第一检测点的左侧与所述第二多边形的交点的总数为奇数,且在该第一检测点的右侧与所述第二多边形的交点的总数为奇数;
当所述第一检测点集合中存在满足所述第一预设条件的第一检测点时,确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点。
4.根据权利要求3所述的方法,其特征在于,所述第一检测点所在的水平线在该第一检测点的左侧与所述第二多边形的交点的总数为:所述第二多边形中位于所述第一检测点所在的垂直线的左侧、且位于所述第一检测点所在的水平线的下方的部分与该水平线的交点的总数;以及
所述第一检测点所在的水平线在该第一检测点的右侧与所述第二多边形的交点的总数为:所述第二多边形中位于所述第一检测点所在的垂直线的右侧、且位于所述第一检测点所在的水平线的下方的部分与该水平线的交点的总数。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述方法还包括:
在确定所述第一检测点集合中不包括落入到所述第二多边形的范围内的检测点时,判断所述第二检测点集合中是否包括落入到所述第一多边形的范围内的检测点;
在所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
6.根据权利要求5所述的方法,其特征在于,所述判断所述第二检测点集合中是否包括落入到所述第一多边形的范围内的检测点的步骤包括:
遍历所述第二检测点集合,判断是否存在满足第二预设条件的第二检测点,其中,所述第二预设条件为:所述第二检测点所在的水平线在该第二检测点的左侧与所述第一多边形的交点的总数为奇数,且在该第二检测点的右侧与所述第一多边形的交点的总数为奇数;
当所述第二检测点集合中存在满足所述第二预设条件的第二检测点时,确定所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点。
7.根据权利要求6所述的方法,其特征在于,所述第二检测点所在的水平线在该第二检测点的左侧与所述第一多边形的交点的总数为:所述第一多边形中位于所述第二检测点所在的垂直线的左侧、且位于所述第二检测点所在的水平线的下方的部分与该水平线的交点的总数;
所述第二检测点所在的水平线在该第二检测点的右侧与所述第一多边形的交点的总数为:所述第一多边形中位于所述第二检测点所在的垂直线的右侧、且位于所述第二检测点所在的水平线的下方的部分与该水平线的交点的总数。
8.一种SVG图形碰撞检测装置,其特征在于,所述装置包括:
第一获取模块,用于在第一SVG图形上获取第一检测点集合,所述第一检测点集合用于形成内接于所述第一SVG图形中的第一多边形;
第二获取模块,用于在第二SVG图形上获取第二检测点集合,所述第二检测点集合用于形成内接于所述第二SVG图形中的第二多边形;
第一判断模块,用于判断所述第一检测点集合中是否包括落入到所述第二多边形的范围内的检测点;
碰撞检测模块,用于在确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
第二判断模块,用于在确定所述第一检测点集合中不包括落入到所述第二多边形的范围内的检测点时,判断所述第二检测点集合中是否包括落入到所述第一多边形的范围内的检测点;
所述碰撞检测模块还用于在所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点时,确定所述第一SVG图形与所述第二SVG图形之间发生碰撞。
10.根据权利要求9所述的装置,其特征在于,所述第一判断模块包括:
第一判断子模块,用于遍历所述第一检测点集合,判断是否存在满足第一预设条件的第一检测点,其中,所述第一预设条件为:所述第一检测点所在的水平线在该第一检测点的左侧与所述第二多边形的交点的总数为奇数,且在该第一检测点的右侧与所述第二多边形的交点的总数为奇数;
第一确定子模块,用于当所述第一检测点集合中存在满足所述第一预设条件的第一检测点时,确定所述第一检测点集合中包括落入到所述第二多边形的范围内的检测点;
所述第二判断模块包括:
第二判断子模块,用于遍历所述第二检测点集合,判断是否存在满足第二预设条件的第二检测点,其中,所述第二预设条件为:所述第二检测点所在的水平线在该第二检测点的左侧与所述第一多边形的交点的总数为奇数,且在该第二检测点的右侧与所述第一多边形的交点的总数为奇数;
第二确定子模块,用于当所述第二检测点集合中存在满足所述第二预设条件的第二检测点时,确定所述第二检测点集合中包括落入到所述第一多边形的范围内的检测点。
CN201610465162.1A 2016-06-22 2016-06-22 Svg图形碰撞检测方法及装置 Active CN106127764B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610465162.1A CN106127764B (zh) 2016-06-22 2016-06-22 Svg图形碰撞检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610465162.1A CN106127764B (zh) 2016-06-22 2016-06-22 Svg图形碰撞检测方法及装置

Publications (2)

Publication Number Publication Date
CN106127764A true CN106127764A (zh) 2016-11-16
CN106127764B CN106127764B (zh) 2019-01-25

Family

ID=57269408

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610465162.1A Active CN106127764B (zh) 2016-06-22 2016-06-22 Svg图形碰撞检测方法及装置

Country Status (1)

Country Link
CN (1) CN106127764B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113312952A (zh) * 2020-12-31 2021-08-27 南京太司德智能电气有限公司 一种svg格式的电力图形画面关联工程一致性检查方法
CN113312952B (zh) * 2020-12-31 2024-04-30 南京太司德智能电气有限公司 一种svg格式的电力图形画面关联工程一致性检查方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101093586A (zh) * 2007-07-12 2007-12-26 上海交通大学 面向复杂场景实时交互操作的并行碰撞检测方法
CN101568943A (zh) * 2006-12-28 2009-10-28 英特尔公司 使用剪切的实时碰撞检测
CN102175222A (zh) * 2011-03-04 2011-09-07 南开大学 基于立体视觉的吊车避障系统
CN102393646A (zh) * 2011-07-05 2012-03-28 西安赛龙航空科技有限公司 用于叶片生产线的多层次动态碰撞检测方法及系统
CN103413348A (zh) * 2013-07-08 2013-11-27 中国大唐集团科学技术研究院有限公司 虚拟现实漫游过程碰撞检测优化设计方法及系统
CN103568022A (zh) * 2012-07-20 2014-02-12 精工爱普生株式会社 碰撞检测系统、碰撞检测用数据生成装置以及机械手
CN104156520A (zh) * 2014-07-31 2014-11-19 哈尔滨工程大学 一种基于直线投影的凸多面体碰撞检测方法
CN105590339A (zh) * 2015-12-15 2016-05-18 广州南沙3D打印创新研究院 三维模型的碰撞检测方法及系统

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101568943A (zh) * 2006-12-28 2009-10-28 英特尔公司 使用剪切的实时碰撞检测
CN101093586A (zh) * 2007-07-12 2007-12-26 上海交通大学 面向复杂场景实时交互操作的并行碰撞检测方法
CN102175222A (zh) * 2011-03-04 2011-09-07 南开大学 基于立体视觉的吊车避障系统
CN102393646A (zh) * 2011-07-05 2012-03-28 西安赛龙航空科技有限公司 用于叶片生产线的多层次动态碰撞检测方法及系统
CN103568022A (zh) * 2012-07-20 2014-02-12 精工爱普生株式会社 碰撞检测系统、碰撞检测用数据生成装置以及机械手
CN103413348A (zh) * 2013-07-08 2013-11-27 中国大唐集团科学技术研究院有限公司 虚拟现实漫游过程碰撞检测优化设计方法及系统
CN104156520A (zh) * 2014-07-31 2014-11-19 哈尔滨工程大学 一种基于直线投影的凸多面体碰撞检测方法
CN105590339A (zh) * 2015-12-15 2016-05-18 广州南沙3D打印创新研究院 三维模型的碰撞检测方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
谭睿璞 等: "基于混合更新策略的可变形物体碰撞检测算法", 《计算机应用研究》 *
马登武 等: "基于包围盒的碰撞检测算法综述", 《系统仿真学报》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113312952A (zh) * 2020-12-31 2021-08-27 南京太司德智能电气有限公司 一种svg格式的电力图形画面关联工程一致性检查方法
CN113312952B (zh) * 2020-12-31 2024-04-30 南京太司德智能电气有限公司 一种svg格式的电力图形画面关联工程一致性检查方法

Also Published As

Publication number Publication date
CN106127764B (zh) 2019-01-25

Similar Documents

Publication Publication Date Title
CN106780612B (zh) 一种图像中的物体检测方法及装置
JP6563038B2 (ja) 情報処理装置及び情報処理方法
CN106401643B (zh) 基于激光点云的隧道超欠挖检测方法
CN104407616B (zh) 基于免疫网络算法的移动机器人动态路径规划方法
CN106951879A (zh) 基于摄像头与毫米波雷达的多特征融合车辆检测方法
CN104144865B (zh) 用于运行药房拣选装置的方法
CN104575075B (zh) 一种基于北斗的城市路网车辆坐标校正方法及装置
CN104183142A (zh) 一种基于图像视觉处理技术的车流量统计方法
CN104155974A (zh) 一种用于机器人快速避碰的路径规划方法及设备
CN108009544A (zh) 目标检测方法及装置
CN109445440A (zh) 基于传感器融合与改进q学习算法的动态避障方法
CN105096299A (zh) 多边形检测方法和多边形检测装置
CN103869279B (zh) 一种多传感器平台的多目标定位跟踪方法
CN104575081B (zh) 车辆进入多边形电子围栏区域的检测方法
CN104778727A (zh) 基于视频监控处理技术的浮动车统计方法
CN104933871B (zh) 一种交通车辆检测方法及系统
CN106956267A (zh) 机器人手臂避障方法和系统
CN105869188A (zh) 点对多边形方位关系的检测方法和系统
CN106643673A (zh) 一种基于基线的地铁隧道水平位移变形监测方法
CN103903298A (zh) 三维数据处理和识别方法
CN101436300A (zh) 障碍物分割方法及装置
CN106127764A (zh) Svg图形碰撞检测方法及装置
CN105303887B (zh) 用于监视车辆的期望轨迹的方法和设备
CN106625661A (zh) 一种基于osg的自适应虚拟夹具的构造方法
CN105004368A (zh) 一种自主机器人的碰撞检测方法、装置及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant