用于检测形状的交叉的可高度并行化算法的制作方法

文档序号:15804048发布日期:2018-11-02 21:40阅读:217来源:国知局
用于检测形状的交叉的可高度并行化算法的制作方法

在涉及二(或三或更多)维建模的现实世界应用中,例如对物理结构、物理属性、机器人、图形和图像处理的模拟,通常期望确定两个或更多个对象是否彼此交叉(例如,冲突)。存在用于检测这种交叉的方法,已知的为剪辑、冲突检测、以及对形状的交叉的检测。然而,用于二维多边形的现有的方法不适合并行化,并且不能利用现代处理单元(pu),诸如中央处理单元(cpu)核或图形处理单元(gpu)线程。



技术实现要素:

呈现了通过检测形状的交叉来克服现有系统的限制的高效且可靠的方法、系统和装置。如本文所述的,交叉检测被定义为确证形状是否交叉。当形状的一部分位于另一形状内或接触另一形状(例如,与另一形状重叠)时,可以发生交叉。

形状可以包括,但不限于一维(1d)直线、二维(2d)多边形(本文也称为“多边形”或“2d多边形”),包括但不限于凸或凹多边形、和/或其它形状。在一些实施例中,多边形可以包括三个或更多大致直的线。另外,根据其它实施例,多边形可以包括单个大致直的线、两个连接的大致直的线和/或三个或更多个连接的直线。

在一些实施例中,检测可以使用并行化来执行。作为非限制的示例,根据一些实施例,该方法(或系统或装置)可以执行并行化操作,包括但不限于并行地且独立于其它处理单元(pu)上的相同操作来运行一部分和/或全部操作。

在其它实施例中,检测可以以串行的方式来执行。作为检测方法(或系统)的部分,根据一些实施例,该方法(或系统或装置)可以通过不将数据锁定在共享全局数据集中而是使用包括并行任务数据的本地数据集和/或共享的只读数据集合来实现并行处理。数据集可以包括,但不限于,可以用于检查形状之间的交叉的形状的集合。集合可以包括,但不限于,包括同质数据的动态阵列,和/或其它类似的数据结构。

根据一些实施例,该方法(或系统或装置)可以包括预处理工具,该预处理工具可以在运行冗长的分析和/或建模操作之前充当输入数据的验证技术。根据一些实施例,该方法(或系统或装置)可以产生(例如,生成)识别形状间的一个或多个交叉的数据集。

一些实施例可以包括一种方法(或相对应的系统),其包括以下步骤中的一个或多个:输入2d形状相关的数据、基于输入数据来生成(或接收)参考线(本文也称为“扫描线”)、并行地处理两条或更多条参考线、记录与2d形状相关联的一个或多个交叉点,和/或收集相对应的结果。

根据一些实施例,交叉检测的方法(以及相对应的系统)可以包括参考线、相交点、交叉点和/或扫描器。在一些实施例中,参考线可以是垂直线(或大致垂直线)。参考线可以通过数据集中的形状的至少一个顶点(本文还称为“点”)。在一些实施例中,参考线可以是水平线(或大致水平线),而非垂直线,在该情况下,本文进一步示出的x(例如,水平)和y(例如,垂直)坐标可以交换,而不影响功能、结果或性能。相交点在本文中定义为包括参考线上的顶点(本文还称为“点”或“相交点”),其中参考线与段相交。一个或多个相交点可以用作一些实施例的方法(或系统)中的中间数据。如上所述,当形状的一部分位于另一形状内或接触另一形状(例如,与另一形状重叠)时,会发生交叉。因此,交叉点在本文中定义为包括形状(与另一形状)的交叉的点,从而指示另一形状的接触或包含。

实施例包括用于确定多个二维(2d)现实世界形状当中的交叉的方法(包括但不限于计算机实现的方法)以及系统(包括但不限于计算机实现的系统。形状可由数据表示,在一些实施例中数据可以被提供作为输入。其它实施例可以生成数据。

形状(和/或数据)可以包括2d现实世界形状的段。段可以包括但不限于形状的单个边(线)。段可以具有起点和/或终点顶点。根据一些实施例,端点在本文中可认为是指段的起始点或终点。在一些实施例中,方法(或相对应的系统)可以定义多个参考线。每个参考线可以与沿给定轴线的顶点中的至少一个交叉。在一些实施例中,方法(或相对应的系统)可以通过对沿参考线的二维(2d)现实世界形状的顶点进行分类来并行地处理参考线。在一些实施例中,基于分类,方法(和相对应的系统)可以确定沿着参考线的二维(2d)现实世界形状的顶点中的任意一个是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分。

根据该方法(或相对应的系统)的一些实施例,二维(2d)现实世界形状可以包括现实世界多边形。此外,交叉的现实世界形状可以在二维(2d)现实世界形状中的另一个之内或接触二维(2d)现实世界形状中的另一个。在一些实施例中,二维(2d)现实世界形状可以是以下中的至少一个的组件:印刷电路板和数字计算机图像。对于非限制示例,一些实施例可应用于2d建模、分析、游戏、用于印刷电路板(pcb)的电子设计自动化(eda)应用、图像识别、计算机视觉和/或增强现实。

在一些实施例中,该方法(或相对应的系统)可以对沿着参考线的二维(2d)现实世界形状的顶点进行分类。在一些实施例中,方法(或相对应的系统)可以针对沿给定参考线的每个顶点,通过将参考线的位置和段的起点顶点和终点顶点的位置进行比较来确定与该顶点相关联的段是否与参考线相交、接触参考线和/或沿着参考线。

该方法(或相对应的系统)的一些实施例可以确定是现实世界形状的部分的沿参考线的二维(2d)现实世界形状的顶点中的任意一个是否与二维(2d)现实世界形状中的另一个交叉。该方法(或相对应的系统)的一些实施例可以包括可选地以计算机硬件(和/或软件)实现的附加的步骤(方法)和/或系统功能(系统)。因此,一些实施例可以确定多个段是否重叠,和/或进一步确定二维(2d)现实世界形状中的不同形状的多个段是否重叠,和/或进一步确定段中的给定段的端点顶点是否位于二维(2d)现实世界形状中的另一个之内,和/或进一步确定段中的给定段的端点顶点是否位于二维(2d)现实世界形状中的另一个上。

根据方法(或相对应的系统)的一些实施例,给定轴线可以是水平(x)轴线或垂直(y)轴线。根据方法(和相对应的系统)的一些实施例,可以确定沿参考线的二维(2d)现实世界形状的顶点中的任意一个是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分。该方法(或相对应的系统)的一些实施例可以确定与参考线中的每个参考线连接的段中的每个段是否与每个参考线相交、接触每个参考线和/或沿着每个参考线。

该系统或方法的一些实施例可以确定是现实世界形状的部分的与二维(2d)现实世界形状中的另一个交叉的沿着参考线的二维(2d)现实世界形状的顶点中的任意一个是否是是基于优先级顺序的。在该优先级顺序中,类型“沿着”的优先级可被视为比类型“相交”和“接触”的优先级更高的优先级(参照与参考线相交、接触参考线或沿着参考线)。

一些实施例可以包括用于确定多个二维(2d)现实世界形状当中的交叉的计算机系统。该系统包括多个处理器和存储器。存储器可以包括(i)存储在其上的计算机代码指令,和/或(ii)表示二维(2d)现实世界形状的数据。该数据可以包括包含二维(2d)现实世界形状的部分的段。该段可以表示二维(2d)现实世界形状的起点顶点和终点顶点。存储器可以可操作地耦合到多个处理器,使得当由多个处理器执行时,计算机代码指令可以使得计算机系统实现被配置为执行一个或多个功能的计算模块。该计算模块可以定义多个参考线。每个参考线可以与沿给定轴线的顶点中的至少一个交叉。计算模块可以通过对沿参考线的二维(2d)现实世界形状的顶点进行分类来并行地处理参考线。计算模块可以基于分类来确定沿参考线的二维(2d)现实世界形状的顶点中的任意一个是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分。

在该系统的实施例中,每个处理器可以处理参考线的子集。段可以在存储器中存储为只读的。二维(2d)现实世界形状可以包括现实世界多边形。现实世界形状可以位于二维(2d)现实世界形状中的另一个之内或接触二维(2d)现实世界形状中的另一个。二维(2d)现实世界形状可以是以下中的至少一个的组件:印刷电路板和数字计算机图像。在该系统的实施例中,对沿参考线的二维(2d)现实世界形状的顶点进行分类可以包括:针对沿给定参考线的每个顶点,通过将参考线的位置和段的起点顶点和终点顶点的位置进行比较,确定与顶点相关联的段是否与该参考线相交、接触该参考线或沿着该参考线。

在该系统的一些实施例中,计算模块还可以被配置为确定作为现实世界形状的部分的沿参考线的二维(2d)现实世界形状的顶点中的任意一个是否与二维(2d)现实世界形状中的另一个交叉。计算模块可以确定多个段是否重叠(例如,彼此之间)。计算模块可以确定二维(2d)现实世界形状中的不同形状的多个段是否重叠。计算模块可以确定段中的给定段的终点顶点是否位于二维(2d)现实世界形状中的另一个的内部。计算模块可以确定段中的给定段的终点顶点是否位于二维(2d)现实世界形状中的另一个上。

根据该系统的一些实施例,给定轴线可以是水平轴线或垂直轴线。根据一些实施例,计算模块可以进一步被配置为确定沿参考线的二维(2d)现实世界形状的顶点中的任意一个是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分。计算模块可以确定与参考线中的每个参考线连接的段中的每个段是否与每个参考线相交、接触每个参考线或沿着每个参考线。

根据该系统的一些实施例,计算模块可以进一步被配置为基于优先级顺序来确定沿参考线的二维(2d)现实世界形状中的顶点中的任意一个是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分。在该优先级顺序中,类型“沿着”的优先级可以被认为具有比类型“相交”和“接触”的优先级更高的优先级(参照与参考线相交、接触参考线、或沿着参考线)。

一些实施例涉及非暂时性计算机可读介质,其具有存储于其上的指令序列,所述指令序列当由耦合到装置的处理器加载和执行时,可以使得装置用于:定义多个参考线,每个参考线与表示二维(2d)现实世界形状的部分的段的起点顶点和终点顶点中的至少一个交叉;通过对沿参考线的二维(2d)现实世界形状的顶点进行分类来并行地处理参考线;并且基于分类来确定沿参考线的二维(2d)现实世界形状的顶点中的任意一个顶点是否是与二维(2d)现实世界形状的的另一个交叉的现实世界形状的部分。

附图说明

根据以下如附图所示的本发明的示例实施例的更具体的描述,上述内容将是显而易见的,在附图中相似的附图标记在不同视图中均指代相同的部件。附图不一定按比例绘制,而重点应放在说明本发明的示出性实施例上。

图1是根据一些实施例的涉及检测形状间的一个或多个交叉的示例方法(或装置或系统的部分)的流程图。

图2示出了根据一些实施例的形状间的交叉的检测。

图3示出了根据一些实施例的作为相交点确定的部分的参考线、多个对应的段。

图4示出了根据一些实施例的多个参考线以及顶点的并行处理。

图5示出了根据一些实施例的计算机网络(或装置或系统)或类似的数字处理环境。

图6示出了根据一些实施例的图5的计算机系统(和装置)中的计算机(例如,客户端处理器/设备或服务器计算机)的示例内部结构的图。

具体实施方式

下面是本发明的示例实施例的描述。

存在用于二维(2d)多边形交叉(也称为“剪辑”和“冲突检测”)的算法。电子设计自动化或eda(如印刷电路板或pcb)中的多边形的本质是复杂的凸-凹形式,因此,接受凸多边形的公知的算法可能不适用。该现有的算法可以包括但不限于,定界形状(例如,框、圆圈)、快速凸包、空间划分(包括但不限于四叉树)、分离轴线定理、扫描和删节(也称为排序与扫描)。

可以接受凸和凹多边形的其它现有算法可能具有其它局限性。然而,与现有算法完全不同,公开的实施例不会遭遇这些局限性(即,实施例不受此限制)。例如,bentley-ottmann算法可能具有数值局限性:没有两条线段端点或相交点可以具有相同的x坐标(垂直和近垂直线需要特殊处理),没有线段端点可以位于另一线段上,没有三个线段可以与单个点交叉,然而,与之完全不同的是,本文提供的实施例不受此限制。greiner-hormann剪辑算法可能无法处理退化,诸如恰在一个顶点处的共同的边或交叉点,但是一些实施例不受此限制。

weiler-atherton算法可以执行二多边形剪辑,可能在多多边形任务方面是低效的,并且可能需要针对每对多边形来运行,因此可能执行n*(n-1)/2个组合。sutherland-hodgman算法可以包括剪辑,而对于凹性不鲁棒。功能适用的算法可能对于多多边形任务表现不好。对于非限制性的示例,vatti(剪辑算法)可以定义两个多边形剪辑,可能在多多边形任务方面是低效的,并且可能需要针对每对多边形来运行。然而,本文提供的实施例不受此限制。

另外,针对多边形交叉检测的大多数现有的算法开发于20世界70年代,并且可能针对单cpu机器。因此,针对多边形交叉检测的大多数现有算法未采用现代多核硬件。相反,一些实施例可以采用现代多核硬件并且可以针对多cpu机器。

不同于本文提供的实施例,现有的方法遭遇性能问题。现有的方法可以采用全局数据集,并且不意在以并行方式使用。因此,将并行执行应用于现有的方法可能需要锁定数据结构。考虑到由这些现有算法使用的全局数据的主动程度,现有算法无法很好地缩放。因此,不同于本文提供的实施例,现有方法可能是顺序的,因此不使用现代cpu/gpu硬件,并且可能无法达到高性能。

此外,不同于本文提供的实施例,在现有方法中,可能不支持多边形自交叉。另外,不同于本文提供的实施例,现有方法不处理退化,诸如在顶点处的共同边或交叉点。因此,实施例克服了现有方法的上述缺陷。

图1是根据一些实施例的涉及检测形状间的一个或多个交叉的示例方法(或装置或系统的部分)1000的流程图。因此,图1示出了根据一些实施例的确定多个二维(2d)现实世界形状当中的交叉的方法(或相对应的系统的部分)1000。一些实施例可以包括表示形状的数据。根据一些实施例,数据可以被提供作为输入。其它实施例可以生成102数据。

形状(和/或数据)可以包括具有起点顶点和终点顶点的2d现实世界形状的段。在一些实施例中,方法(或相对应的系统)1000可以定义104多个参考线。每个参考线可以与沿给定轴线的顶点中的至少一个交叉。在一些实施例中,方法(或相对应的系统)1000可以通过对沿参考线的二维(2d)现实世界形状的顶点进行分类来并行地处理106参考线。在一些实施例中,基于分类,该方法(或相对应的系统)1000可以并行地确定108沿参考线的二维(2d)现实世界形状的顶点中的任意一个是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分。

根据该方法(或相对应的系统)1000的一些实施例,二维(2d)现实世界形状可以包括现实世界多边形。另外,交叉的现实世界形状可以位于二维(2d)现实世界形状中的另一个之内或接触二维(2d)现实世界形状中的另一个。在一些实施例中,二维(2d)现实世界形状可以是以下中的至少一个的组件:印刷电路板和数字计算机图像。对于非限制示例,一些实施例可应用于2d建模、分析、游戏、用于印刷电路板(pcb)的电子设计自动化(eda)应用、图像识别、计算机视觉和/或增强现实。

在一些实施例中,对沿参考线的二维(2d)现实世界形状的顶点进行分类可以包括针对沿给定参考线的每个顶点,通过将参考线的位置与段的起点顶点和终点顶点的位置进行比较,来确定与顶点相关联的段是否与参考线相交、接触参考线或沿着参考线。

该方法(或相对应的系统)1000的一些实施例可以确定作为现实世界形状的部分的沿参考线的二维(2d)现实世界形状的顶点中的任意一个是否与二维(2d)现实世界形状中的另一个交叉。该方法(或相对应的系统)1000的一些实施例可以包括可选地以计算机硬件(和/或软件)实现的附加步骤(方法)1000和/或系统功能(系统)1000。因此,在一些实施例中,方法(或相对应的系统)1000可以确定多个段是否重叠。在一些实施例中,该方法(或相对应的系统)1000可以确定二维(2d)现实世界形状中的不同形状的多个段是否重叠。在一些实施例中,该方法(和相对应的系统)1000可以确定段中的给定段的端点顶点是否位于二维(2d)现实世界形状中的另一个之内。在一些实施例中,该方法(或相对应的系统)1000可以确定段中的给定段的端点顶点是否位于二维(2d)现实世界形状中的另一个上。

根据该方法(或相对应的系统)1000的一些实施例,给定轴线可以是水平(x)轴线或垂直(y)轴线。根据一些实施例,该方法(或相对应的系统)1000可以确定沿参考线的二维(2d)现实世界形状的顶点中的任意一个是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分。根据一些实施例,该方法(或相对应的系统)1000可以确定与参考线中的每个参考连接的段中的每个段是否与每个参考线相交、接触每个参考线和/或沿着每个参考线。

根据一些实施例,该方法(或相对应的系统)1000可以确定沿参考线的二维(2d)现实世界形状的任意一个顶点是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分是基于优先级顺序的。在该优先级顺序中,顶点“沿着”参考线的优先级可以被认为具有比与参考线“相交”或“接触”参考线更高的优先级。

图2示出了根据方法(或系统)1000的一些实施例的检测(分别为层202、204的)形状之间的一个或多个交叉206。如图2所示,典型的印刷电路板(pcb)的片段可能被错误地认为包括两层(分别为202、204)。在图2中,电路208可以由多边形表示。图2是复杂无效数据的示例。

一些实施例包括计算机实现的算法(本文还称为“算法”),其可以被包括作为方法(或系统)1000的部分并且可以以硬件和/或软件实现在一个或多个计算设备上。算法可以包括以下阶段(还称为功能、和/或步骤)中的一个或多个:(1)参考线生成;(2)参考线处理;(3)结果收集;(4)结果的后处理。这些阶段(1-4)中的每一个可以顺序地或并行地执行。一些实施例如下(关于并行操作和顺序操作):(1)参考线生成-顺序;(2)参考线处理-并行或顺序;(3)结果收集-顺序;(4)结果的后处理-并行或顺序。参考线处理(阶段2)优选地并行地执行,但不限于此。

在一些实施例中,输入数据可以被接收(提供)给方法(或系统)1000,所述输入数据包括包含段(边)的形状的集合,每个段包括两个二维(2d)端点,包括起点和终点。在其它实施例中,输入数据可以由方法(或系统)1000生成。

阶段1-参考线生成:(可以是顺序的,但不限于此)

在参考线生成中,可以创建参考线的集合。参考线的集合可以包括唯一数字的阵列,表示端点的x坐标。下面的伪码(示例1)示出了执行参考线生成:

示例1:

removeduplicates(根据一些实施例,对集合进行分类以加速该过程)

阶段2-参考线处理(优选地并行,但不限于此)

在参考线处理中,根据一些实施例,每个参考线可由本文称为“扫描器”或“扫描器对象”的单独的对象进行处理。不同于使用顺序扫描的现有方法,一些实施例的扫描器可以应用并行算法来并行地处理两个或更多个参考线,如下文进一步说明的。对于非限制性的示例,根据一些实施例,一个扫描器(对象)可单独地应用于每个参考线。

根据一些实施例,数据可以是局部的。在一些实施例中,局部数据除了作为共享的只读段集合之外,可应用于单个参考线。换言之,在一些实施例中,总的数据集可以细分成多个局域数据集。根据一些实施例,每个局部数据集可以由单个(给定)扫描器而不是由其它扫描器写入。

每个给定的局域数据集可以包括对应于给定参考线(而不对应于其它参考线和/或数据集)的数据。假设每个局部数据集可由单个(给定)扫描器写入,并且优选地不通过其它扫描器写入,则可以并行地处理参考线,而无需考虑潜在的竞争条件,因为每个参考线可以对应于不同的局部数据集。因此,在一些实施例中,该方法(或系统)1000可以并行地处理参考线,而不锁定数据或创建竞争条件。另外,一些实施例支持openmp(开放多处理)和/或ppl(并行模式库)并且利用它们来进行测试。

在阶段2(参考线处理)中,根据方法(或系统)1000的一些实施例,扫描器可以执行以下阶段中的一个或多个:(阶段2.1)确定相交点;以及(阶段2.2)确定形状之间的交叉。用于这些功能中的每一个的相关联的算法被描述为沿着参照单一扫描器。然而,在一些实施例中,这些算法还可以应用于多于一个扫描器。

阶段2.1.确定相交点:

作为参考线处理的部分,相交点可以被确定,包括扫描和/或记录相交点(本文还称为“相交点确定”)。根据一些实施例,相交点可以包括参考线上的点,其中参考线与一个或多个段相交或接触一个或多个段。根据一些实施例,相交点可用作中间数据(例如,从相交点确定的阶段2.1的输出,以及对用于确定交叉点的阶段2.2的输入)。

图3示出了根据一些实施例的作为相交点确定的部分的参考线和多个对应的段。如图3所示,根据一些实施例,扫描器可以沿参考线302“扫描”,从而分别检测各个相交点320、322、324和326。扫描器可以沿参考线302向上或向下扫描。

如图3所示,方法(或系统)1000的一些实施例可以基于分别具有端点顶点330、332的段306、308、310、312(换言之,每个段具有起点顶点330和终点顶点332,“端点”顶点被定义为包括“起点”顶点和“终点”顶点)是否与关联于给定轴线304的参考线302相交来确定相交点320、322、324、326。虽然在图3中示出了四个段306、308、310、312,但是实施例不限于此,并且如本文所述,可应用一至三个段或五个或更多个段。

如图3所示,相交点确定可以涉及关于参考线302来分析每个段306、308、310、312并且进行以下确定中的一个或多个:远离(clear)、相交(crossing)、接触(touching)和/或沿着(following)。首先,如图3中的段312所示,如果段312不与参考线302相交,则方法(或系统)1000可以确定段312和段的关联顶点处于clear状态(例如,不与参考线相交、不接触参考线或不沿着参考线)。因此,根据一些实施例,clear状态可以不对应于相交点,但是crossing、touching和/或following状态可以对应于相交点。接着,如图3中的段306所示,方法(或系统)1000可以确定段306和段306的顶点320与参考线302相交(例如,在“crossing”状态下)。

接着,如图3中的段308所示,方法(或系统)1000可以确定段308和段308的顶点322正接触参考线302(例如,处于“接触”状态)。根据一些实施例,如果段308的端点330、332中的一个位于扫描器上,则段308正接触参考线。

此外,如图3中的段310所示,方法(或系统)1000可以确定段310和段的对应的起点顶点326和终点顶点324正沿着参考线(例如,处于“following”状态)。根据一些实施例,如果段310的端点330、332两者均位于扫描器上,则段320正沿着参考线。

根据一些实施例,并且如图3所示,clear结果可以不产生相交点,但是crossing、touching和following的结果可以产生一个或多个相交点。

而且,根据一些实施例,优先级方案可被采用作为如本文所述的阶段2.2(确定交叉)的部分。换言之,根据一些实施例,方法(或系统)1000可以确定沿参考线的二维(2d)现实世界形状中的任意一个顶点是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分,并且该确定可以基于优先级顺序。在优先级顺序中,“沿着”状态(本文还称为“following”)可以被认为比“相交”(本文还称为“crossing”)和“接触”(本文还称为“touching”)优先级更高。根据一些实施例,crossing可能比touching优先级更高。因此,根据一些实施例,在下面的阶段2.2的算法中following可以具有最高优先级。

如图3中所示,只要参考线是垂直无界线,则段的y坐标350可以被忽略,并且结果可以取决于段的端点x坐标304根据参考线302位于何处。

根据一些实施例,下面的伪码演示了检测相交点的高效的算法,其可以包括发现段相对于垂直线的位置关系。结果可以包括针对每个参考线的相交点的集合。

每个相交点可以通过可包括以下中的一个或多个的数据结构来描述:(1)形状标识符(id)、(2)段标识符(id)、(3)相交点类型包括但不限于:crossing、touching和/或following(即,开始或结束),(4)crossing、touching和/或following的相交点类型的y坐标(即,开始),以及(5)如果相交点的类型是following,则following的y坐标(即,结束)。

下面的伪码(示例2)示出了相交点的检测(阶段2.1):

示例2:

使用上述示例2算法(阶段2.1的),可以确定相交点。接着,根据一些实施例,阶段2.1的输出(相交点)可被用作中间数据(例如,来自相交点确定的阶段2.1的输出可用作用于确定交叉的阶段2.2的输入)。

阶段2.2.确定交叉:

作为参考线处理的部分,形状间的交叉可以基于所确定的相交点来确定(本文还称为“确定交叉”)。根据一些实施例,相交点可以包括参考线上的点,其中参考线与一个或多个段相交。下面更详细描述的图4示出了根据一些实施例的多个参考线以及顶点的并行处理。下面更详细描述的图4是关于如何确定交叉。

作为确定形状之间的交叉的部分,一些实施例可以包括一个或多个扫描器(扫描器对象)。根据一些实施例,每个扫描器可以包括数据结构(或数据集合,或本文中的集合),下文称为与每个相交点相关联的“形状中(inshape)”(或inshape集合,或此处的inshape数据结构)以及“形状上(onshape)”(或onshape集合,或此处的onshape数据结构)。根据一些实施例,对于给定的相交点,inshape可以指示给定的相交点是否在形状(例如,多边形)内。根据一些实施例,对于给定的相交点,onshape可以指示给定的相交点在形状(例如,多边形)(的边界)上。下面参考inshape和onshape数据结构提供了说明性的示例。

如图4所示,方法(或系统)1000的一些实施例可以从参考线412、414、416、418的底部向上分别(沿图4的x轴488所示)遍历(例如,沿行)每个参考线412、414、416、418。下面描述x2参考线(图4的元素414)的这样的遍历。

如关于x2参考线(图4的元素414)在图4中所示的,从参考线414的底部的第一相交点是类型crossing(例如,相交点)的顶点c(图4的元素420)。遍历相交点420,扫描器将顶点c添加到inshape集合,意味着状态是“在abhf矩形中”。然后,其达到abhf矩形422内部并且将线段444的顶点d(图4的相交点元素424)添加到inshape集合中,同时记录与矩形422的交叉,因为该状态“在abhf矩形422中”。再次通过线段470的顶点d(图4的相交点元素42),先前添加的顶点d从inshape集合中移除,因为其在矩形440之外。当通过相交点e(图4的元素426)时,扫描器移到abhf矩形之外(与矩形的422边界二次相交),并且方法(或系统)1000将属于abhf矩形422的相交点c(元素420)从inshape中移除,结束x2参考线414的“在inshape状态中”。

换言之,根据一些实施例,inshape集合可以保留正在相交的形状的较低的相交点。而且,当扫描器移出较低的相交点(通过较高的相交点)时,扫描器可以将该形状的较低的相交点从inshape集合中移除。

接着,下面描述针对x1参考线(图4的元素412)的遍历。同样如下面所述,沿参考线412的遍历还示出了onshape集合的使用。如图4中关于参考线412所示的,从底部起的第一相交点是顶点a(图4的元素430),其属于线段af(元素436)和ab(元素432)。根据相交点类型的优先级(上文所述),af线段(图4的元素436)中的顶点a(图4的元素430)具有touching类型,其具有低优先级,因此被扫描器忽略。考虑ab线段(图4的元素432)的相交点a(图4的元素430),扫描器沿着ab线段(图4的元素432),因此扫描器可以将ab线段(图4的元素432)的相交点a(图4的元素430)添加到onshape集合,表明在矩形abhf的线段(图4的元素422)“上”的状态。接着,扫描器通过相交点b(图4的元素434),其分别属于两个线段ab(图4的元素432)和bh(图4的元素438)。因此,线段bh(图4的元素438)被扫描器忽略,因为其相交类型touching具有比线段ab(图4的元素432)的相交类型following更低的优先级,并且因此,扫描器移到线段ab(图4的元素432)之外。因此,相交点a(图4的元素430)从onshape移除,因为扫描器不再位于线段ab(图4的元素432)“上”。换言之,根据一些实施例,onshape集合可以保存可属于可被沿着而不与该段相交的段的相交点。

根据一些实施例,onshape集合可以暂时保存touching类的相交点,诸如线段af(图4的元素436)的点a(图4的元素430)和/或线段bh(图4的元素438)的点b(图4的元素434)。这些被具有更高优先级following的线段ab(图4的元素432)的点a(图4的元素430)和b(图4的元素434)克服,然后从onshape移除,或忽略。

换言之,根据一些实施例,随着扫描器沿参考线从下向上行进通过相交点:

(1)集合inshape可以保存其形状的边界被穿过奇数次的相交点。因此,如果inshape不为空,则当前位置位于至少一个形状内。该形状可在偶数相交时从inshape移除;和/或

(2)集合onshape可以保存关于位于参考线上的形状的数据,因此,如果onshape不为空,则当前位置可以位于该形状的following段上。而且,onshape可以保存可被接下来的相交点移除的,并且因此,可能是短期存在的touching相交点。下面,关于相交点d的处理示出了touching处理的示例。

根据一些实施例,阶段2.2可以确定一个或多个交叉。根据一些实施例,交叉点可以表示方法(或系统)1000的最终结果。

交叉点可以具有以下类型中的一个或多个:

(1)交叉(intersecting)-不同形状的两个段交叉;

(2)内部(inside)-一个形状的端点位于另一形状内;

(3)顶点接触(vertextouch)-一个形状的段端点(顶点)位于另一形状的段上;以及

(4)边接触(edgetouch)-两个垂直段重叠。

根据一些实施例,交叉点的优先级方案可以从intersecting上升到edgetouch,然而,该方法(或系统)1000不如此限于该优先级方案。换言之,intersecting可以具有最低的优先级,并且edgetouch可以具有最高的优先级。

下面的伪码产生了交叉点。下面的伪码(示例3)示出了交叉的检测(阶段2.2):

示例3:

根据一些实施例,图4示出了方法(或系统)1000的扫描器如何处理相交点以确定形状之间的交叉(本文还称为“交叉点”)。在图4的非限制性的示例实施例中,该方法(或系统)1000可以确定相交点d(元素424)、g(元素452)和h(元素454)。下面的描述示出了如何可以确定这些相交点。

根据一些实施例,如图4所示,矩形(例如,方形)和三角形可以产生四个参考线:x1至x4(分别为元素412、414、416和418)。

参考线x1:

如图4所示,该方法(或系统)1000可以处理参考线x1(元素412)。在阶段2.1(确定相交点)中,图4的处理导致参考线x1(元素412)的总共四个相交点。在阶段2.2(确定交叉)中,图4的处理未导致多边形交叉。

如图4中所示,处理参考线x1导致顶点a(元素430)处的两个相交点:线段af(元素436)的端点,以及线段ab(元素432)的端点。扫描器忽略具有touching类型的线段af(元素436)的点a(元素430),因为线段ab(元素432)的点a(元素430)具有following类型,其比touching优先级更高。扫描器然后将线段ab(元素432)的点a(元素430)添加到onshape集合中。

处理参考线x1还导致顶点b(元素434)处的两个相交点:线段bh(元素438)的端点(元素434)以及线段ab(元素432)的端点(元素434)。扫描器忽略具有touching类型的线段bh(元素438)的点b(元素434),因为线段ab(元素432)的点b(元素434)具有following类型,其比touching优先级更高。在扫描器达到following段(线段ab,元素432)的末端时,扫描器找到线段bh(元素438)的起始点并且从onshape集合移除点a(元素430)。

参考线x2:

如图4所示,方法(或系统)1000可以处理参考线x2(元素414)。在阶段2.1(确定相交点)中,处理导致参考线x2的总共四个相交点:(元素414);顶点c(元素420)处的相交点,顶点d(元素424)处的两个相交点,以及顶点e(元素426)处的相交点。在阶段2.2(确定交叉)中,处理导致顶点d(元素424)处的多边形交叉。

处理参考线x2(元素414)导致顶点c(元素420)处的相交点:线段af(元素436)的相交点。顶点c(元素420)处的相交点具有crossing类型,并且此时在inshape中没有相同矩形422的其他相交点,这意味着参考线x2(元素414)正与形状(矩形422)相交。扫描器将点c(元素420)添加到inshape中,因此跟随参考线x2(元素414)上的点c(元素420)的点变成交叉处,直至到达该形状422的第二相交点(相交点e,元素426)。

处理参考线x2(元素414)导致顶点d(元素424)处的两个相交点:线段di和dj(分别为元素442,444)的端点,每个均具有touching相交类型。接着,扫描器认识到inshape集合不为空,因此顶点d(元素424)变成内部(inside)交叉点。然后,扫描器将线段dj(元素444)的点d(元素424)添加到onshape集合中。接着,扫描器来到线段di(元素442)的点d(元素424)并且发现线段dj(元素444)的点d(元素424)已经在onshape中,因此扫描器将线段dj(元素444)的点d(元素424)从onshape中移除,因为两个线段di和dj(分别为元素442、444)均属于同一形状(三角形idj,元素440)。

处理参考线x2(元素414)导致顶点e(元素426)处的相交点:线段bh(元素438)的相交点。扫描器发现inshape(点c,元素420)中的形状(矩形abhf,元素422),这意味着inshape状态是在矩形abhf(元素422)“之内”,并且然后,变成在矩形abhf(元素422)“之外”,因此,扫描器将点c(元素420)从inshape中移除。onshape集合则为空,因此,点c(元素420)不变成交叉点。

参考线x3:

如图4所示,该方法(或系统)1000可以处理参考线x3(元素416)。在阶段2.1(确定相交点)中,图4的处理导致参考线x3(元素416)的总共7个相交点:顶点f(元素450)处的两个相交点,顶点g(元素452)处的相交点,顶点h(元素454)处的两个相交点,以及顶点i(元素458)处的两个相交点。在阶段2.2(确定交叉)中,图4的处理导致两个多边形交叉:分别为顶点g(元素452)和顶点h(元素454)。

处理参考线x3(元素416)导致顶点f(元素450)处的两个相交点:线段af和fh(分别为元素436和456)的端点。扫描器忽略具有touching类型的线段af(元素436)的点f(元素450),因为线段fh(元素456)中的点f(元素450)具有following相交类型,其比touching相交类型优先级更高。扫描器将线段fh(元素456)的点f(元素450)添加到onshape集合中。换言之,跟随参考线x3(元素416)上的f(元素450)直至达到点h(元素454)的点(元素452和454)为交叉处(本文还称为“交叉点”)。

处理参考线x3(元素416)导致线段dj(元素444)的顶点g(元素452)处的相交点。扫描器将顶点g(元素452)识别为交叉点,因为onshape集合不为空。接着,扫描器将顶点g(元素452)添加到inshape集合(对于三角形idj,元素440)中,因为扫描器沿参考线x3(元素416)扫描进入idj三角形(元素440)。接着,直至达到顶点i(元素458)的相交点,不属于idj三角形(元素440)的其他相交点变成交叉处(即,元素452和454)。

处理参考线x3(元素416)导致顶点h(元素454)的两个相交点,即,bh线段(元素438)的端点以及fh线段(元素456)的端点。扫描器忽略具有touching相交类型的线段bh(元素438)的点h(元素454),因为存在属于following相交类型的fh线段(元素456)的更高优先级的点h(元素454)。点h(元素454)是交叉点,因为inshape集合包括属于形状idj(元素440)的点g(元素452)。扫描器将点h(元素454)从onshape集合中移除,因为点h(元素454)位于following相交类型的fh线段(元素456)的末端。

处理参考线x3(元素416)导致顶点i(元素458)的两个相交点,即di线段(元素442)的端点以及ij线段(元素460)的端点。扫描器发现inshape集合(与点g相关联,元素452)中的三角形idj(元素440),并且将g(元素452)从inshape集合中移除。onshape集合为空,因此点i(元素458)不是交叉点。

参考线x4:

如图4所示,该方法(或系统)1000可以处理参考线x4(元素418)。在阶段2.1(确定相交点)中,图4的处理导致参考线x4(元素418)的总共两个相交点:线段dj和ij(分别为元素444和460)的端点。在阶段2.2(确定交叉)中,图4的处理未导致多边形交叉。

扫描器将线段dj(元素444)的点j(元素462)添加到inshape集合中,并且将点j(元素462)从inshape集合中移除,因为下一个点(线段ij(元素460)的点j(元素462))属于两个线段dj(元素444)和ij(元素460)的同一形状(三角形idj,元素440)。onshape集合为空,因此点j(元素462)不是交叉点。

阶段3-参考线收集:(优选地为顺序的,但不限于此)

在一些实施例中,该方法(或系统)1000可以收集可包括一个或多个交叉点的结果。

在下面的示例4中示出了针对结果收集的伪码:

示例4

foreachreferenceline

moveresultstoglobalresultscollection

endloop

如图4所示,根据一些实施例,通过应用示例4的伪码,方法(或系统)1000可以产生(例如,生成)下面三个交叉点中的一个或多个:(1)在矩形abhf(图4的元素422)内的三角形idj(图4的元素440)的顶点d(图4的元素424);(2)与三角形idj(图4的元素440)和矩形abhf(图4的元素422)的边相交的顶点g(图4的元素452);以及(3)在三角形idj(图4的元素440)内的矩形abhf(图4的元素422)的顶点h(图4的元素454)。

根据一些实施例,点k(图4的元素470)优选地不包括在结果集合中,并且优选地不被算法发现,因为点k(图4的元素470)不属于参考线。然而,方法(或系统)1000不限于此。根据一些实施例,如果诸如点k(图4的元素470)的点是感兴趣的对象,则可以针对交叉段来对结果进行查询,并且计算这样的点(如点k,元素470)。

阶段4-结果的后处理:(并行或顺序)

根据一些实施例,方法(或系统)1000可以使用本领域的技术人员已知的任意一个方法来对收集的结果进行后处理。

图5示出了根据一些实施例的用于确定多个二维(2d)现实世界形状当中的交叉的计算机网络(或系统)1000或类似的数字处理环境。客户端计算机/设备50和服务器计算机60提供执行应用程序等的处理、存储和输入/输出设备。客户端计算机/设备50还可以通过通信网络70链接到其它计算设备,包括其它客户端设备/过程50和服务器计算机60。通信网络70可以是远程访问网络、全局网络(例如,因特网)、世界范围的计算机集合、局域网或广域网以及当前使用各个协议(tcp/ip、等)来彼此通信的网关的部分。其它电子设备/计算机网络架构是适合的。

客户端计算机/设备50可以配置有计算模块(位于元件50、60和/或70中的一个或多个处)。在一些实施例中,用户可以从用户设备访问执行于服务器计算机60上的计算模块,用户设备诸如为移动设备、个人计算机、或本领域技术人员所知的任意一个计算设备,不进行限制。根据一些实施例,客户端设备50和服务器计算机60可以分布在计算模块上。

服务器计算机60可以被配置为与客户端设备50进行通信以提供对包括表示二维(2d)现实世界形状的数据的数据库的访问(和/或访问该数据库)的计算模块。服务器计算机60可以不是单独的服务器计算机,而是云网络70的部分。在一些实施例中,服务器计算机(例如,计算模块)可以通过允许访问位于客户端50、服务器60或网络70(例如,全局计算机网络)上的数据而使用户能够确定多个二维(2d)现实世界形状当中的交叉。客户端(配置模块)50可以将表示二维(2d)现实世界形状的数据传送回和/或传送自服务器(计算模块)60。在一些实施例中,客户端50可以包括执行在客户端50上用于确定多个二维(2d)现实世界形状当中的交叉的客户端应用或组件,并且客户端50可以将相对应的数据传送到服务器(例如,计算模块)60。

系统1000的一些实施例可以包括用于确定多个二维(2d)现实世界形状当中的交叉的计算机系统。系统1000可以包括多个处理器84。系统1000还可以包括存储器90。存储器90可以包括:(i)存储在其上的计算机代码指令;和/或(ii)表示二维(2d)现实世界形状的数据。该数据可以包括包含了二维(2d)现实世界形状的部分的段。该段可以表示二维(2d)现实世界形状的部分的起点顶点和终点顶点。存储器90可以可操作地耦合到多个处理器84,使得计算机代码指令当由多个处理器84执行时,可以使计算机系统1000实现被配置为执行一个或多个功能的计算模块(计算模块位于图5的元件50、60、70或图6的元件82、84、86、90、92、94、95中的任意一个上,这些元件中的任意一个中,或由这些元件中的任意一个实现)。计算模块可以定义多个参考线。每个参考线可以与沿给定轴线的顶点中的至少一个交叉。计算模块可以通过对沿参考线的二维(2d)现实世界形状的顶点进行分类来并行地处理参考线。计算模块可以基于分类来确定沿参考线的二维(2d)现实世界形状的顶点中的任一个是否是与二维(2d)现实世界形状中的另一个交叉的现实世界形状的部分。

根据一些实施例,图6是图5的计算机系统1000中的计算机(例如,客户端处理器/设备50或服务器计算机60)的示例内部结构的图。每个计算机50、60包含系统总线79,其中总线是用于在计算机或处理系统的组件当中进行数据传输的硬件线的集合。系统总线79实质上是将实现元件之间的信息传输的计算机系统的不同元件(例如,处理器、磁盘存储设备、存储器、输入/输出端口、网络端口等)连接的共享通路。附连到系统总线79的是用于将各个输入和输出设备(例如,键盘、鼠标、显示器、打印机、扬声器等)与计算机50、60连接的i/o设备接口82。网络接口86允许计算机连接到与网络(例如,图5的网络70)附连的其它各种设备。存储器90提供用于实现一些实施例(例如,本文所描述的多用户站点、配置模块、和/或管理模块引擎元件)的计算机软件指令92和数据94的易失性存储装置。磁盘存储设备95提供用于实现本公开的实施例的计算机软件指令92和数据94的非易失性存储装置。中央处理单元84也附连到系统总线79并且提供用于计算机指令的执行。

在一个实施例中,处理器例程92和数据94是计算机程序产品(通常标记为92),包括提供用于本发明系统的软件指令的至少一部分的计算机可读介质(例如,可移动存储介质,诸如一个或多个dvd-rom、cd-rom、磁盘、磁带等)。计算机程序产品92可以由任意适合的软件安装程序来安装,这是本领域所公知的。在另一实施例中,软件指令的至少一部分还可以通过线缆、通信和/或无线连接来下载。在其它实施例中,本发明程序是体现在传播介质(例如,通过诸如因特网之类的全局网络或其它网络传播的无线电波、红外波、激光波、声波、或电波)上的传播信号上的计算机程序传播信号产品107(图5)。这样的载波介质或信号提供了用于本发明例程/程序92的软件指令的至少一部分。

在替代实施例中,传播信号是承载于传播介质上的模拟载波或数字信号。例如,传播信号可以是在全局网络(例如,因特网)、电信网络或其它网络上传播的数字化信号。在一个实施例中,传播信号是在一段时间内通过传播介质传输的信号,诸如用于在毫秒、秒、分钟或更长的时段内通过网络以分组发送的软件应用的指令。在另一实施例中,计算机程序产品92的计算机可读介质是计算机系统50可以例如通过接收传播介质并且识别体现于传播介质中的传播信号来接收并读取的传播介质,如上文关于计算机程序传播信号产品所描述的。

一般而言,术语“载波介质”或暂时性载波涵盖了上述的暂态信号、传播信号、传播介质、存储介质等。

实施例或其方面可以实现为硬件(包括但不限于硬件电路)、固件或软件的形式。如果以软件实现,软件可以存储在被配置为使得处理器能够下载软件或其指令的子集的任意一个非暂时性计算机可读介质上。处理器然后执行指令并且被配置为操作或使得装置以如本文所述的方式进行操作。

此外,硬件、固件、软件、例程或指令可以在本文中描述为执行数据处理器的某些动作和/或功能。然而,应当意识到,本文所包含的这样的描述仅为了方便,并且这样的动作实际上是由于计算设备、处理器、控制器或执行固件、软件、例程、指令等的其它设备而实现的。

应当理解,流程图、框图和网络图可以包括以不同方式布置或以不同方式表示的更多或更少的元件。但是,应当理解的是,一些实现方式可以规定示出了以特定方式实现的实施例的执行的框图和网络图以及框图和网络图的数量。

因此,其它实施例还可以以各种计算机体系结构、物理的、虚拟的、云计算机和/或其某种组合来实现,并且因此,本文所描述的数据处理器仅意在用于示例说明的目的,而不意在为实施例的限制。

虽然已经参考本公开的示例实施例特别地示出和描述了本公开,但是本领域技术人员应当理解,可以在其中进行形式和细节上的各种改变,而不偏离如随附权利要求涵盖的本公开的范围。

一些实施例可以提供可以变换行为和/或数据、提供功能改进和/或解决技术问题的一个或多个技术优势。在一些实施例中,技术优势(和/或功能改进)可以包括但不限于与现有方法相比的效率、精度、速度或其它效果的改进。一些实施例提供了一些技术优势(和/或功能改进),因为它们克服了现有方法的功能缺陷。一些实施例包括包含但不限于性能改进和/或可缩放性(例如,pu的高效使用)的技术优势。一些实施例的其它技术优势(和/或功能改进)包括创建适合于执行查询的结果数据集,包括但不限于以下查询:是否存在交叉、某类型的交叉是否存在、一个形状是否与另一形状交叉,和/或何种形状与给定形状交叉。

根据一些实施例,其它技术优势(和/或功能改进)包括用于处理查询和/或至少确定以下的能力:形式是否与另一形状交叉,以及何种形状与给定形状交叉。

一些实施例可以通过确定与数据相关联的多个二维(2d)现实世界形状当中的交叉来变换表示二维(2d)现实世界形状的数据。该数据可以包括包含了二维(2d)现实世界形状的部分的段。段可以表示二维(2d)现实世界形状的部分的起点顶点和终点顶点。

一些实施例通过确定多个二维(2d)现实世界形状当中的交叉解决了技术问题(因此提供技术效果)。现有的方法可能涉及数千至数十万的3d建模操作,如布尔联合,使用由2d输入数据创建的模型。现有的方法可能花费几分钟至几小时并且涉及无效的输入数据,导致无效结果。工作流无法评估输入。与现有的方法完全不同,本文提供的实施例不仅解决了技术问题(因此提供技术效果),而且提供了技术优势(和/或功能改进),因为使用一些实施例检查数据可能对于极大的数据集仅花费几毫秒或几秒,并且可以确定数据是否有效。除了提供验证输入数据的技术优势之外,一些实施例还可以提供不仅产生包括关于形状的交叉的信息的数据集的技术优势(和/或功能改进)。

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