一种面面叠加环构造方法.pdf

上传人:a1 文档编号:972516 上传时间:2018-03-22 格式:PDF 页数:31 大小:1.63MB
返回 下载 相关 举报
摘要
申请专利号:

CN200810057537.6

申请日:

2008.02.02

公开号:

CN101499082A

公开日:

2009.08.05

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||专利申请权的转移IPC(主分类):G06F 17/30变更事项:申请人变更前权利人:北京中科算源技术发展有限公司变更后权利人:北京中科通图信息技术有限公司变更事项:地址变更前权利人:100190 北京市海淀区中关村科学院南路6号科研综合楼1213室变更后权利人:100192 北京市海淀区学清路8号科技财富中心A座11层北区登记生效日:20110818|||专利申请权的转移IPC(主分类):G06F 17/30变更事项:申请人变更前权利人:中国科学院计算技术研究所变更后权利人:北京中科算源技术发展有限公司变更事项:地址变更前权利人:100080 北京市海淀区中关村科学院南路6号变更后权利人:100190 北京市海淀区中关村科学院南路6号科研综合楼1213室登记生效日:20110624|||实质审查的生效|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

中国科学院计算技术研究所

发明人:

闫 杰; 朱效民; 郎 兵; 方金云

地址:

100080北京市海淀区中关村科学院南路6号

优先权:

专利代理机构:

北京泛华伟业知识产权代理有限公司

代理人:

王 勇

PDF下载: PDF下载
内容摘要

本发明提供一种面面叠加环构造方法,包括对两个多边形组中的多边形进行交操作,以及对两个多边形组中的多边形进行差操作;其中,交操作包括:对产生交点的多边形环通过交点的出入属性查找多边形环;对没有产生交点的多边形环,根据代表点与另一组多边形间的关系,决定是否将该环插入到结果的环的集合中去;差操作包括:对多边形进行分类;对只存在同色交点以及不存在任何交点的多边形进行插入操作,得到差结果的内环集合、差结果的外环集合以及一个待拆分的内环集合;根据交点以及待拆分的内环集合求差操作,将所得到的结果插入差结果的外环集合中。本发明具有效率高、构造过程完整的优点。

权利要求书

1、  一种面面叠加环构造方法,包括对两个多边形组中的多边形进行交操作,以及对两个多边形组中的多边形进行差操作;其中,
所述的对两个多边形组中的多边形进行交操作包括:
步骤1)、对产生交点的多边形环通过交点的出入属性查找属于所述多边形环上的所有交点,根据所查找到的交点得到相应的多边形环;根据所得到多边形环的属性插入交结果的内环集合或交结果的外环集合中;
步骤2)、对没有产生交点的多边形环,在其中一个多边形环上选择一个代表点,然后根据该点与另一组多边形间的关系,决定是否将该环插入到结果的环的集合中去;
所述的对两个多边形组中的多边形进行差操作包括:
步骤3)、对两个多边形组中的多边形进行分类,分为存在异色交点的多边形,只存在同色交点的多边形,以及不存在任何交点的多边形;
步骤4)、对上一步骤中分类得到的只存在同色交点的多边形以及不存在任何交点的多边形进行插入操作,得到差结果的内环集合、差结果的外环集合以及一个待拆分的内环集合;
步骤5)、根据交点以及待拆分的内环集合求差操作,将所得到的结果插入差结果的外环集合中。

2、
  根据权利要求1所述的面面叠加环构造方法,其特征在于,所述的步骤1)包括:
步骤1-1)、对相交多边形中的各个交点进行排序;
步骤1-2)、对排序后的各个交点进行遍历操作,在一次操作过程中,判断在用于保存交点的集合中是否存在未被访问过的交点,若存在,则按照步骤1-1)所得到的交点排列顺序选择一个未被访问过的交点,然后执行下一步骤,否则,结束操作;
步骤1-3)、首先判断当前点是否是完全重合的交点,若是,则根据对特殊类型交点处理的方法对其进行处理,否则,判断当前的交点是出点还是入点,若是入点,则按照交点所在第一组多边形的方向前进,直至找到下一个交点,若是出点,则按照交点所在的第二组多边形前进,直至找到下一个交点;其中,所述的出点是所述的第一组多边形走出所述的第二组多边形的点,所述的入点是所述的第一组多边形进入所述的第二组多边形的点;
步骤1-4)、查找到下一个交点后,判断该交点与最初的交点是否一致,若一致,则认为找到了一个环,执行下一步,否则,重新执行步骤1-3);
步骤1-5)、根据所得到环的方向判断所述环是内环还是外环,根据判断结果,将所得到的环存放到交结果的内环集合或外环集合中。

3、
  根据权利要求2所述的面面叠加环构造方法,其特征在于,在所述的步骤1-1)中,所述的对交点进行排序包括:
首先按照交点所属的多边形为交点排序,属于一个多边形的交点排列在一起;之后为同一多边形上的交点按照其归属的环进行排序,属于同一个环的交点放在一起;然后为同一环上的交点根据交点所在的段进行排序,将属于同一线段上的交点排列在一起,将不同线段上的交点按照线段的顺序排列;最后将同一线段上的交点按照距离线段起点的顺序进行排列。

4、
  根据权利要求2所述的面面叠加环构造方法,其特征在于,在所述的步骤1-5)中,所述的根据所得到环的方向判断所述环是内环还是外环包括:
若所述环的方向为顺时针方向,则该环为外环,若所述环的方向为逆时针方向,则该环为内环。

5、
  根据权利要求1所述的面面叠加环构造方法,其特征在于,所述的步骤2)包括:
步骤2-1)、在一个多边形组中,在没有交点的多边形的内环和/或外环上分别选择边界点作为代表点;
步骤2-2)、将所选择的边界点与另一组多边形中的各个多边形进行比较,若该边界点在另一多边形组的多边形内部,则执行下一步,若该边界点在另一多边形组的多边形外部,则执行步骤2-4);
步骤2-3)、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入交结果的外环集合中,若所述边界点是内环上的边界点,则将环写入交结果的内环集合中;最后结束操作;
步骤2-4)、将所述边界点所在的环放弃,不写入结果中,结束操作。

6、
  根据权利要求1所述的面面叠加环构造方法,其特征在于,在所述的步骤4)中,所述的求差操作包括对作为被减数的源多边形组上的环的操作,以及作为减数的擦除多边形组上的环的操作。

7、
  根据权利要求6所述的面面叠加环构造方法,其特征在于,所述的对源多边形组上的没有产生异色交点的环的操作包括:
步骤4-1-1)、在源多边形组中,在多边形的内环和/或外环上选择边界点;
步骤4-1-2)、将所选择的边界点与擦除多边形组中的各个多边形进行比较,若该边界点在擦除多边形组的多边形内部,则执行下一步,若该边界点在擦除多边形组的多边形外部,则执行步骤4-1-4);
步骤4-1-3)、将所述边界点所在的环放弃,不写入结果中,结束操作;
步骤4-1-4)、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入差结果的外环集合中,若所述边界点是内环上的边界点,则将环写入差结果的内环集合中;最后结束操作。

8、
  根据权利要求6所述的面面叠加环构造方法,其特征在于,所述的对擦除多边形组上的没有产生异色交点的环的操作包括:
步骤4-2-1)、在擦除多边形组中,在多边形的内环、外环上分别选择边界点;
步骤4-2-2)、将所选择的边界点与源多边形组中的各个多边形进行比较,若该边界点在源多边形组的多边形内部,则执行下一步,若该边界点在源多边形组的多边形外部,则执行步骤4-2-6);
步骤4-2-3)、对多边形的类型进行判断,若所述多边形中没有任何交点,则执行步骤4-2-4),若所述多边形中只有同色交点,则执行步骤4-2-5);
步骤4-2-4)、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入差结果的内环集合中,若所述边界点是内环上的边界点,则将环写入差结果的外环集合中;最后结束操作;
步骤4-2-5)、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入待拆分内环集合中,若所述边界点是内环上的边界点,则将环写入差结果的外环集合中;最后结束操作;
步骤4-2-6)、将所述边界点所在的环放弃,不写入结果中,结束操作。

9、
  根据权利要求1所述的面面叠加环构造方法,其特征在于,所述的步骤5)包括:
步骤5-1)、得到属于同一个多边形的所有异色交点,判断所述异色交点是否是完全重合的交点,若是,则根据对特殊类型交点处理的方法对其进行处理,否则,执行下一步;
步骤5-2)、根据异色交点的出入属性求作为被减数的源多边形中位于作为减数的擦除多边形外部的线段;
步骤5-3)、根据异色交点的出入属性求擦除多边形位于源多边形内部的线段;
步骤5-4)、判断对于源多边形的待拆分内环集合是否为空,若为空,则直接执行下一步,否则,对待拆分内环集合中的待拆分内环按照环上的同色交点进行打断,生成各条线段;
步骤5-5)、对步骤5-3)所生成的线段,判断线段上是否存在同色交点,若存在同色交点,则根据同色交点将线段打断;
步骤5-5)、对上述步骤5-4)、5-5)所得到的所有被打断的线段进行重叠抵消操作,抵消具有重叠的线段;
步骤5-6)、将取消重叠部分后的所有被打断的线段按照顺序依次连接,得到结果的外环部分,并添加到结果的外环集合中去。

10、
  根据权利要求9所述的面面叠加环构造方法,其特征在于,所述的重叠抵消操作限于作为减数的擦除多边形产生的线段,然后对重叠抵消操作所得到的剩余线段反置其顺序,把线段上的所有点的顺序反置。

11、
  根据权利要求2或9所述的面面叠加环构造方法,其特征在于,所述的特殊类型交点处理的方法包括:
包含有特殊类型交点的两个多边形分为同向完全重合或异向完全重合,若为同向完全重合,则将所述两个多边形上的重叠环根据方向加到交的结果集合中去;若为异向完全重合,则将两个多边形求差时,被求差的多边形上的环根据方向加到差结果的内环或者外环集合中去。

说明书

一种面面叠加环构造方法
技术领域
本发明涉及GIS(Geographical Information System,地理信息系统)中的叠加分析领域,特别涉及一种面面叠加环构造方法。
背景技术
地理信息系统(GIS)是一种十分重要的空间信息系统。它是在计算机软、硬件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。空间分析是GIS的重要组成部分,是GIS的灵魂,也是评价一个GIS功能的主要指标之一。空间分析是基于地理目标的位置和形态特征的空间数据分析技术,其目的是提取和发现隐含的空间信息和规律,是空间数据挖掘和知识发现的基本方法之一。空间分析主要包括空间量算、关系查询、缓冲分析、叠加分析、网络分析等内容,其中的叠加分析是本发明所要关注的焦点。在常见的GIS系统中,采用分层方式组织地理景观,同一区域的整个数据层集表达了该地区地理景观的内容。在对分层数据进行组合时采用了叠加分析。具体的说,叠加分析是将相关主题层组成的数据层进行叠加产生一个新数据层的操作,其结果综合了原来的两层或多层要素所具有的属性。叠加分析不仅包含空间关系的叠加,还包括属性关系的综合。
最基本的叠加分析是在两个图层上的操作,假设把第一个图层叫做输入图层,第二个图层叫做叠加图层,则输入图层与叠加图层之间互为对应图层,即输入图层的对应图层为叠加图层,叠加图层的对应图层为输入图层。在叠加分析中,叠加图层必须为面图层,而输入图层可以是点、线或者面图层。根据不同的输入图层的不同类型,叠加分析分为点面叠加、线面叠加和面面叠加。
在面面叠加过程中,主要包括以下流程:
1、利用扫描线算法求取相交的面与面之间的交点;
2、根据求得的交点做相应的叠加操作,从而得到结果环;对没有产生交点的环,根据一定的插入规则,加到结果内环或者外环集合中去;
3、根据ID属性对结果环中的内环和外环做匹配操作,得到结果多边形;
4、最后根据ID继承属性,生成最终的叠加结果。
现有技术在根据交点求结果环的过程中,存在着以下缺陷:
首先,现有技术在求得交点后,将交点按照其在多边形中的顺序添加到用于表示多边形的链表中,然后沿着多边形的方向前进,遇到交点时,根据交点的出入属性决定前进方向,直至到达起点。最终所得到的结果环为一个既包含端点又包含交点的点的链表结构。因此,要实现上述的过程,需要频繁地对链表进行插入操作。此外,在上述过程中,前进方向只可能在遇到交点时才可能产生变化,因此,在理论上可以将多边形在两个交点间的端点直接添加到最后生成的结果环中,而由于多边形本身采用前述的链表结构,因此在上述构造过程中,必须依次遍历链表中的所有点,而无论该点是交点还是端点。现有技术中所采用的上述数据结构显然会对叠加环构造过程的执行效率产生影响。
其次,在现有技术中,在构造叠加环的整个过程中,通常是对两组多边形中的多边形两两进行计算,这样做的效率不高,且存在重复计算的问题,比如,求差时,若一个多边形A与B1、B2都相交,则求A、B之差时,A与B1之差要作为输入,再计算其与B2之差。
再次,现有技术对不存在交点的多边形如何处理没有进行明确的说明,这也不利于整个结果环计算过程的正确性。
发明内容
本发明的目的是克服现有技术所存在的叠加环构造效率不高,对叠加环构造过程不完整的缺陷,从而提供一种高效、完整的面面叠加环构造方法。
为了实现上述目的,本发明提供了一种面面叠加环构造方法,包括对两个多边形组中的多边形进行交操作,以及对两个多边形组中的多边形进行差操作;其中,
所述的对两个多边形组中的多边形进行交操作包括:
步骤1)、对产生交点的多边形环通过交点的出入属性查找属于所述多边形环上的所有交点,根据所查找到的交点得到相应的多边形环;根据所得到多边形环的属性插入交结果的内环集合或交结果的外环集合中;
步骤2)、对没有产生交点的多边形环,在环上选择一个代表点,然后根据该点与另一组所有多边形间的关系,决定是否将该环插入到结果的环的集合中去;
所述的对两个多边形组中的多边形进行差操作包括:
步骤3)、对两个多边形组中的多边形进行分类,分为存在异色交点的多边形,只存在同色交点的多边形,以及不存在任何交点的多边形;
步骤4)、对上一步骤中分类得到的只存在同色交点的多边形以及不存在任何交点的多边形进行插入操作,得到差结果的内环集合、差结果的外环集合以及一个待拆分的内环集合;
步骤5)、根据交点以及待拆分的内环集合求差操作,将所得到的结果插入差结果的外环集合中。
上述技术方案中,所述的步骤1)包括:
步骤1-1)、对相交多边形中的各个交点进行排序;
步骤1-2)、对排序后的各个交点进行遍历操作,在一次操作过程中,判断在用于保存交点的集合中是否存在未被访问过的交点,若存在,则按照步骤1-1)所得到的交点排列顺序选择一个未被访问过的交点,然后执行下一步骤,否则,结束操作;
步骤1-3)、首先判断当前点是否是完全重合的交点,若是,则根据对特殊类型交点处理的方法对其进行处理,否则,判断当前的交点是出点还是入点,若是入点,则按照交点所在第一组多边形的方向前进,直至找到下一个交点,若是出点,则按照交点所在的第二组多边形前进,直至找到下一个交点;其中,所述的出点是所述的第一组多边形走出所述的第二组多边形的点,所述的入点是所述的第一组多边形进入所述的第二组多边形的点;
步骤1-4)、查找到下一个交点后,判断该交点与最初的交点是否一致,若一致,则认为找到了一个环,执行下一步,否则,重新执行步骤1-3);
步骤1-5)、根据所得到环的方向判断所述环是内环还是外环,根据判断结果,将所得到的环存放到交结果的内环集合或外环集合中。
上述技术方案中,在所述的步骤1-1)中,所述的对交点进行排序包括:
首先按照交点所属的多边形为交点排序,属于一个多边形的交点排列在一起;之后为同一多边形上的交点按照其归属的环进行排序,属于同一个环的交点放在一起;然后为同一环上的交点根据交点所在的段进行排序,将属于同一线段上的交点排列在一起,将不同线段上的交点按照线段的顺序排列;最后将同一线段上的交点按照距离线段起点的顺序进行排列。
上述技术方案中,在所述的步骤1-5)中,所述的根据所得到环的方向判断所述环是内环还是外环包括:
若所述环的方向为顺时针方向,则该环为外环,若所述环的方向为逆时针方向,则该环为内环。
上述技术方案中,所述的步骤2)包括:
步骤2-1)、在一个多边形组中,在没有交点的多边形的内环和/或外环上分别选择边界点作为代表点;
步骤2-2)、将所选择的边界点与另一组多边形中的各个多边形进行比较,若该边界点在另一多边形组的多边形内部,则执行下一步,若该边界点在另一多边形组的多边形外部,则执行步骤2-4);
步骤2-3)、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入交结果的外环集合中,若所述边界点是内环上的边界点,则将环写入交结果的内环集合中;最后结束操作;
步骤2-4)、将所述边界点所在的环放弃,不写入结果中,结束操作。
上述技术方案中,在所述的步骤4)中,所述的求差操作包括对作为被减数的源多边形组上的环的操作,以及作为减数的擦除多边形组上的环的操作。
上述技术方案中,所述的对源多边形组上的没有产生异色交点的环的操作包括:
步骤4-1-1)、在源多边形组中,在多边形的内环和/或外环上选择边界点;
步骤4-1-2)、将所选择的边界点与擦除多边形组中的各个多边形进行比较,若该边界点在擦除多边形组的多边形内部,则执行下一步,若该边界点在擦除多边形组的多边形外部,则执行步骤4-1-4);
步骤4-1-3)、将所述边界点所在的环放弃,不写入结果中,结束操作;
步骤4-1-4)、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入差结果的外环集合中,若所述边界点是内环上的边界点,则将环写入差结果的内环集合中;最后结束操作。
上述技术方案中,所述的对擦除多边形组上的没有产生异色交点的环的操作包括:
步骤4-2-1)、在擦除多边形组中,在多边形的内环、外环上分别选择边界点;
步骤4-2-2)、将所选择的边界点与源多边形组中的各个多边形进行比较,若该边界点在源多边形组的多边形内部,则执行下一步,若该边界点在源多边形组的多边形外部,则执行步骤4-2-6);
步骤4-2-3)、对多边形的类型进行判断,若所述多边形中没有任何交点,则执行步骤4-2-4),若所述多边形中只有同色交点,则执行步骤4-2-5);
步骤4-2-4)、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入差结果的内环集合中,若所述边界点是内环上的边界点,则将环写入差结果的外环集合中;最后结束操作;
步骤4-2-5)、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入待拆分内环集合中,若所述边界点是内环上的边界点,则将环写入差结果的外环集合中;最后结束操作;
步骤4-2-6)、将所述边界点所在的环放弃,不写入结果中,结束操作。
上述技术方案中,所述的步骤5)包括:
步骤5-1)、得到属于同一个多边形的所有异色交点,判断所述异色交点是否是完全重合的交点,若是,则根据对特殊类型交点处理的方法对其进行处理,否则,执行下一步;
步骤5-2)、根据异色交点的出入属性求作为被减数的源多边形中位于作为减数的擦除多边形外部的线段;
步骤5-3)、根据异色交点的出入属性求擦除多边形位于源多边形内部的线段;
步骤5-4)、判断对于源多边形的待拆分内环集合是否为空,若为空,则直接执行下一步,否则,对待拆分内环集合中的待拆分内环按照环上的同色交点进行打断,生成各条线段;
步骤5-5)、对步骤5-3)所生成的线段,判断线段上是否存在同色交点,若存在同色交点,则根据同色交点将线段打断;
步骤5-5)、对上述步骤5-4)、5-5)所得到的所有被打断的线段进行重叠抵消操作,抵消具有重叠的线段;
步骤5-6)、将取消重叠部分后的所有被打断的线段按照顺序依次连接,得到结果的外环部分,并添加到结果的外环集合中去。
上述技术方案中,所述的重叠抵消操作限于作为减数的擦除多边形产生的线段,然后对重叠抵消操作所得到的剩余线段反置其顺序,把线段上的所有点的顺序反置。
上述技术方案中,所述的特殊类型交点处理的方法包括:
包含有特殊类型交点的两个多边形分为同向完全重合或异向完全重合,若为同向完全重合,则将所述两个多边形上的重叠环根据方向加到交的结果集合中去;若为异向完全重合,则将两个多边形求差时,被求差的多边形上的环根据方向加到差结果的内环或者外环集合中去。
本发明的优点在于:
1、本发明在叠加环构造过程中,通过对单独存储的交点的应用,避免了对初始输入多边形结构的频繁访问,提高了叠加环的构造效率;
2、本发明对没有产生交点的环,提供了明确的插入规则,使得叠加环构造过程更为完整。
3、本发明在环的结构中附加了必要的归属信息,即此环是由哪两个或一个多边形得到的,为后续的内环归属判断、属性继承提供了辅助信息。
附图说明
以下,结合附图来详细说明本发明的实施例,其中:
图1为一个实施例中对具有交点的两个多边形的示意图;
图2为另一个实施例中对不具有交点的两个多边形组的示意图;
图3为又一个实施例中对同色多边形组中具有相邻多边形的情况的示意图;
图4为对图3所描述的实施例中的各个多边形的交点的说明图;
图5为对图3所描述的实施例中如何根据交点得到最后的环的过程示意图;
图6为本发明的面面叠加构造方法的流程图;
图7为对过同一点的线段的类型划分情况的说明图。
具体实施方式
下面结合附图和具体实施方式,对本发明的面面叠加环构造方法做详细说明。
在对本发明的方法做详细说明之前,首先对本发明中所涉及的内环和外环的概念进行相应的说明:
环、内环以及外环:环是由一系列的点环绕组成的。内环和外环都是与多边形相关的定义,内环外环都是一个多边形的组成部分。通常意义上而言,多边形是指一个点串围成的区域。但是在GIS中,根据属性的不同,有些多边形内部的区域不是多边形的一部分。例如,北京市、天津市在河北省的边界轮廓范围内,但是北京市和天津市并不是河北省的区域。为此,提出了带洞的多边形的定义。即任何一个多边形由一个外环和零个或者若干个内环组成,多边形所包含的区域是指外环内部并且在内环外部的区域。所谓的外环就是多边形所围的区域的外轮廓;内环即在外环内部的一些环,这些环内的区域虽然是多边形的外环所包围的区域,但是并非多边形的区域,内环所包围的区域不是多边形的内部区域。
在本发明中,要构造面面叠加环就要涉及到多边形间交点的应用,在本发明中所采用的交点包含有如交点的坐标、交点所在线段、交点是出点还是入点、以及交点碰到相同坐标值的交点时的排序信息。为了方便理解,在对本发明的方法进行详细说明前,首先对面面叠加中的线段处理方法进行说明,通过该方法可以得到本发明中所涉及的交点。
步骤100、输入多边形,所述多边形来源于两个多边形组;
步骤200、拆分所述的多边形,得到多边形上的各条线段;
步骤300、对步骤200所得到的各条线段采用扫描线算法处理,得到所有相交的线段;
步骤400、将步骤300所得到的所有相交的线段按照相交情况以及线段所属的多边形组进行分类,得到四种类别:red1_blue1、red2_blue1、red1_blue2以及red2_blue2;其中的线段颜色表示线段所来源的多边形组;
如图7所示,在上述四种类别的内部,根据不同颜色线段之间的关系,以及线段间的位置关系,对过同一点的线段做了进一步的划分,划分后的情况包括:
在red1_blue2中,线段进一步分为:两条蓝色线段在红色线段的异侧、两条蓝色线段在红色线段的同侧、红色线段与一条蓝色线段重叠;
在red2_blue1中,线段进一步分为:两条红色线段在蓝色线段的异侧、两条红色线段在蓝色线段的同侧、蓝色线段与一条红色线段重叠;
在red2_blue2中,线段进一步分为:红色线段组与蓝色线段组之间不存在交叉关系、红色线段组与蓝色线段组之间存在交叉关系、一条红色线段与一条蓝色线段重叠、两条红色线段分别与两条蓝色线段重叠。
步骤500、对所有相交的线段按照步骤400所划分的类别分别进行处理,得到属于交点的点的坐标、交点所在的线段、交点是出点还是入点的信息、记录交点排序大小的标志信息。
具体的说:
Red1_blue1:红蓝各一条线段相交时,两条线段相交的点即为交点,记录该点到交点列表中,记录到交点列表中的与交点相关的信息包括:交点的坐标值、产生此交点的两条线段、交点的出入属性(即红色线段从此交点走入还是走出蓝色线段所在的多边形)以及交点排序大小的标志信息。
在对所述交点是出点还是入点进行判断时,可能会因为判断对象的不同而产生不同的判断结果。例如,在本发明中,在一个交点上存在蓝色线段与红色线段,因此,一个交点可能是红色线段出入蓝色线段所在多边形的点,也可能是蓝色线段出入红色线段所在多边形的点。在本发明中,所述的出点或入点是用来表示红色线段走出或走入蓝色多边形的点。若求并(或者要求对称差,即要得到两个差)则需要计算蓝色线段走出或者走入红色多边形,计算方法类似。判断两个线段之间的交点是出点还是入点,可根据线段在线段方向上的第二个端点与多边形的局部线段间的关系得到,即若第二个端点在当前局部线段的内侧,为入点;否则为出点。在上述的判断过程中,线段都是有方向的,每条线段都有两个端点,沿着线段方向的第一个端点就是本申请中所涉及的第一个端点,相应的,沿着线段方向的第二个端点就是本申请中所涉及的第二个端点。上述的局部线段是指过同一点,且与第二个端点所在线段属于不同组多边形的线段。
记录交点排序大小的标志信息针对的是当前线段所代表的多边形邻接的情况。对于蓝色线段,如果一个交点对于一个红色多边形为入点,则该点的顺序靠后,标记为ip_blue_big;若一个交点对于另一个红色多边形为出点,则该点的顺序靠前,标记为ip_blue_small。对于红色线段在蓝色多边形上的交点排序大小的标志信息的判断与之相类似,对于顺序靠后的点标记为ip_red_big,对于顺序靠前的点标记为ip_red_small。一般而言,可以根据出入属性。对于在红色线段上的交点,则按其红色线段出入蓝色多边形的属性判断;对于在蓝色交点上的交点,则按其蓝色线段出入红色多边形的属性判断。对具有相同坐标的两交点,出点在前,入点在后,即先走出一个多边形才走入另一个多边形。
Red1_blue2:一条红色线段与两条蓝色线段相交的情况,这种情况可以进一步细分为三种情形。
第一种情形为两条蓝色线段在红色线段的异侧,此时三条线段相交的点为交点,将该交点记录到交点列表中,并将产生交点的红蓝线段的相关信息也加以记录。在记录交点所在的线段时,由于交点所在的线段只能有两条,因此需要从两条蓝色线段中选择一条作为与红色线段相交的线段。在具体选择时,选取在红色线段对应的多边形内部的蓝色线段作为产生交点的线段,其中,所述的内部是通过判断蓝色线段的非交点的端点是否在红色线段的内侧得到的。在具体判断时,从蓝色线段上选取一个非交点的端点,比如选取第二条蓝色线段的第二个端点,若此点在红色线段的内侧,则所述的第二条蓝色线段与所述的红色线段就是产生交点的线段,否则第一条蓝色线段与红色线段为产生交点的线段。
在得到交点所在的线段后,还需要对交点是出点还是入点进行判断。判断交点是出点还是入点的方法在前文中已经有详细说明,此处不再重复。
在完成对交点类型的判断后,还可以根据交点的类型得到交点排序大小的标志信息,并对该信息进行记录。交点顺序大小的标志信息根据线段所在组的不同而存在差异。红色多边形的排序信息,可根据出入点属性得到,红色线段必然先走出一个蓝色多边形然后才走入另一个蓝色多边形,即对于具有相同坐标值的交点,出点在前,入点在后;即:入点遇到相同坐标值的交点时,此点需要排在后边,也就是要加一个ip_red_big的标记,相反的,出点遇到相同坐标值的交点时,此点需要排在前边,也就是要加一个ip_red_small的标记。对于蓝色多边形的排序信息,则需要计算。计算的原则类似于计算蓝色线段从此点进入还是走出红色多边形,同样是出点在前,添加ip_blue_big的标记,入点在后,添加ip_blue_small。
第二种情形为两条蓝色线段在红色线段的同侧,在此种情况下,蓝色线段与红色线段之间相交的点不属于交点,因此,无需记录该点的坐标信息,相应的也就不需要进行点类型的判断。
第三种情形为红色线段与一条蓝色线段之间存在重叠的情况。在此种情况下,需要进一步分情况讨论。假如红色线段与重叠的蓝色线段之间方向相反,则蓝色线段与红色线段之间相交的点不属于交点,不记录与该点相关的信息。假如红色线段与重叠的蓝色线段之间的方向相同,表明二者所代表的多边形必然有重合区域,则蓝色线段与红色线段之间相交的点属于交点,记录该交点的坐标信息以及所属的线段。在记录交点所在的线段时,将红色线段以及不与红色线段重叠的蓝色线段作为交点所属的线段。根据交点所属线段的方向,对所述交点是出点还是入点进行判断,然后根据判断的结果得到交点排序大小的标志信息,并对该信息进行记录。其中,在判断出点入点时,首先选取红色线段的非交点的端点,该端点根据红色线段的方向,可能是第一个端点,也可能是第二个端点。对应上述两种可能,其出入属性恰好相反。不妨假设非交点的端点是第二个端点。则判断该端点与不重叠的蓝色线段的关系,若在内侧,即第二个端点在蓝色线段的内侧,则交点为入点;若在外侧,即第二个端点在蓝色线段的外侧,则交点为出点。以上假设非交点的端点是第二个端点。若非交点的端点是第一个端点,则出入属性反置即可。
Red2_blue1:两条红色线段与一条蓝色线段相交的情况。此种情况与上一种的Red1_blue2相类似,对其的处理也基本相同,对其中的三种情况分别进行说明。
第一种情况为两条红色线段在蓝色线段的同侧,此时不具有交点。
第二种情况为两条红色线段在蓝色线段的异侧,此时存在交点,记录交点的信息,以及交点所在的线段的信息。在记录交点所在线段的信息时,选取在蓝色线段对应的多边形内部的红色线段作为产生交点的线段。根据产生交点的线段对交点是出点还是入点进行判断,根据判断的结果得到交点排序大小的标志信息,并对该信息进行记录。其中,在得到交点所在的线段后,可直接对交点是出点还是入点进行判断。例如,在两条红色线段中,若第二条红色线段为交点所在的线段,则交点为入点,若第一条红色线段为交点所在的线段,则交点为出点。
第三种情况为蓝色线段与一条红色线段之间存在重叠的情况。在此种情况下,需要进一步分情况讨论。假如蓝色线段与重叠的红色线段之间方向相反,则蓝色线段与红色线段之间相交的点不属于交点,不记录与该点相关的信息。假如蓝色线段与重叠的红色线段之间的方向相同,则蓝色线段与红色线段之间相交的点属于交点,记录该交点的坐标信息以及所属的线段。在记录交点所属的线段时,将蓝色线段以及不与所述蓝色线段重叠的红色线段作为交点所属的线段。根据交点所属线段的方向,对所述交点是出点还是入点进行判断,然后根据判断的结果得到交点排序大小的标志信息,并对该信息进行记录。
Red2_blue2:两条红色线段与两条蓝色线段相交的情况。与前面的情况相比,此类情况更为复杂,下面分别进行说明。根据线段之间的关系,可分为三组:第一组是四条线段间都存在接触关系,第二组是在线段间的一条蓝色线段与一条红色线段重叠,第三组是线段间的两条蓝色线段与两条红色线段分别重叠。
在第一组中,可进一步分为两种情况,一是红色线段组与蓝色线段组之间不存在交叉关系,此时认为线段间相交的点不属于交点;二是红色线段组与蓝色线段组之间存在交叉关系,此时,线段间相交的点属于交点,记录该点的坐标信息以及交点所在的线段。在记录交点所在的线段时,由于在两个线段组中各有两条线段,因此,需要在两个线段组中各选择一条线段作为交点所在的线段,选择原则如下:选取在不同组的线段所生成的多边形内部的线段作为产生交点的线段。与前文相类似,所述的内部也是通过非交点的端点是否在当前异色线段的内侧进行判断。
得到交点所在的线段后,可根据上述的出点、入点判断标准判断交点是出点还是入点,并根据出点、入点信息得到交点排序大小的标志信息。这一过程在前文中已经有详细说明,此处不再重复描述。
在第二组中,虽然根据重叠线段的末端间的关系,可分为末端超出、末端重合和末端缩进三种类型,但三种类型的处理方法都相同,此处进行统一说明。在第二组中,一条红色线段与一条蓝色线段重合,对于不重合的红色线段和蓝色线段,首先判断不重合的线段的端点是否在另一组线段所生成的多边形的内部,只要有一条不重合的线段的端点在另一组线段所生成的多边形的内部,就认为四条线段相交的点属于交点,反之,则认为线段之间的点不属于交点。上述的端点是否在另一组线段所生成的多边形内部的具体判断过程在前文中已经有详细的说明,具体实现可参考前述的说明。
当线段之间的点为交点时,需要对交点所在的线段进行判断。在判断过程中,如果不重合的红蓝线段都在对方线段所形成的多边形内部,则这两条不重合的线段就是交点所属的线段;如果第一组中的不重合的线段在对方线段所形成的多边形内部,而第二组中不重合的线段在对方线段所形成的多边形的外部,则第一组中的不重合线段与第二组中的重合线段为交点所属的线段。
得到交点所属的线段后,还可以进一步判断交点是出点还是入点,并根据出点、入点信息得到交点排序大小的标志信息。
在第三组中,根据线段末端关系的不同(末端超出、重合、缩进),可以将该组进一步划分为9种情形,对9种情形的处理过程基本一致。对于线段不是两两恰好完全重合的8种情形,则线段之间的点不属于交点。而对于线段两两恰好完全重合的情形,需要根据当前线段所在的环去判断是否完全重合。若所在的环完全重合,则记录当前交点,并根据当前边的方向是否相同设置标记信息:same_dir_complete_the_same或者diff_dir_complete_the_same,即同向或者异向完全重合。在碰到这样的交点时,根据叠加操作,或者输出多边形,或者不输出而仅仅把多边形设置访问标记,表明已经参与过计算了,只是没有产生结果。
在对本发明中所涉及的交点的生成方法进行详细说明后,下面就与本发明相关的内容进行描述。
本发明的面面叠加环构造方法的目的是对输入图层和叠加图层上的多边形组进行处理,得到相应的叠加环,所述的叠加环按照类型可分为内环和外环。此外,所述的叠加环按照对多边形组处理时,所涉及多边形组中的多边形是否存在交点,还可以分为产生交点的多边形环和没有产生交点的多边形,对于这两种多边形环有不同的处理方法,下面分别进行说明。
第一种情况:产生交点的多边形环,即与异色多边形相交的多边形的环。通过上述的面面叠加过程中的线段处理方法,可以得到交点的坐标信息、交点所属线段的信息、交点为出点或入点的判断信息以及记录交点排序大小的标志信息。利用上述信息采用交、差操作可得到相应的面面叠加环。
第二种情况:没有产生交点的多边形环。此种情况下,采用在一个多边形环上选择一个点,然后判断该点与另一组多边形的关系,从而求取面面叠加环。在这一个操作过程中,具体的插入规则也会因为叠加操作的不同而不同。
在两个多边形组中,要得到多边形组间的面面叠加环,主要通过对不同多边形组中的多边形做交操作或差操作得到。下面结合具体实例,分别对上述两种情况下的交、差操作进行详细说明。
如图1所示,在两组多边形中,各有一个矩形,分别用X和Y表示,所述的X和Y相交。矩形X包括4个端点,分别用a、b、c、d表示,而矩形Y包括4个端点,分别用e、f、g、h表示。两个矩形之间有2个交点,分别用A、B表示。在计算机中,采用一定的数据结构表示上述的矩形以及交点。对于矩形X,以表1的方式对矩形中的端点进行了记录,对于矩形Y,用表2的方式对矩形中的端点进行记录。
 

aBcda

表1
 eFghe

表2
通过上述表格可以看出,在记录一个矩形时,通过记录矩形中的各个端点的方式实现,而在记录起始端点时记录了两次,当该端点重复记录时,表示对所述矩形的记录过程结束。在对矩形中的端点的上述记录过程中,由于对各个端点的记录是有顺序的,因此,根据端点的记录顺序还可以知道矩形的方向。例如,对表1所记录的矩形X,它的方向为a-b-c-d-a,即顺时针方向。同样的,矩形Y的方向也是顺时针方向。此外,根据对矩形中端点的记录,还可以知道矩形所包括的线段以及线段的顺序,如在矩形X中包括如下顺序的线段:ab、bc、cd、da。
在计算机中,还对两个矩形之间的交点进行了记录,如表3所示。
 AB

表3
在表3中记录了所存在的交点,虽然在表3中没有示出交点的附属信息,如前述的交点是出点还是入点、交点所属的线段等,但本领域的普通技术人员应当了解,在对交点进行记录时,记录了面面叠加过程中的线段处理方法所得到的与交点相关的所有信息。对于图1中的实施例,要求取所述的面面叠加环,实际上要求取X∩Y,X-Y,Y-X三个环。
下面以图1中的上述实施例对两组多边形相交时通过“交操作”求产生交点的多边形环的详细过程进行描述。为了描述的方便,在本实施例中的多边形组都只有一个矩形,但本领域的普通技术人员应当了解,本发明的方法还可以适用于其它情况更为复杂的多边形组。
步骤10、对多边形组中所存在的交点进行排序。在一个多边形组中,首先按照交点所属的多边形为交点排序,属于一个多边形的交点排列在一起;之后为同一多边形上的交点按照其归属的环进行排序,属于同一个环的交点放在一起;然后为同一环上的交点根据交点所在的段进行排序,将属于同一线段上的交点排列在一起,将不同线段上的交点按照线段的顺序排列;最后将同一线段上的交点按照距离线段起点的顺序进行排列。
结合图1中的实施例可以知道,在矩形X中,根据矩形的方向可以得到排序后的交点为A-B,而在矩形Y中,根据矩形的方向所得到的排序后的交点为B-A。对排序后的上述结果分别进行存储。
步骤11、对多边形组中的各个交点进行遍历操作,在一次操作过程中,判断在用于保存交点的集合中是否存在未被访问过的交点(也就是还没有利用此交点构造结果多边形),若存在,则按照交点的排列顺序选择一个未被访问过的交点,然后执行下一步骤,否则,结束操作;
结合图1的实施例,在第一个矩形中,交点的排列顺序为A-B,因此首选择交点A进行后续操作。
步骤12、首先判断当前点是否是完全重合的交点,若是,则根据对特殊类型交点处理的方法对其进行处理,否则,判断当前的交点是出点还是入点,若是入点,则按照交点所在第一组多边形的方向前进,直至找到下一个交点,若是出点,则按照交点所在的第二组多边形前进,直至找到下一个交点;其中,所述的出点入点都是指第一组多边形出入第二组多边形的相应点。
在本步骤求取交点的过程中,由于交点是独立于多边形的结构单独存储的,所以查找下一个交点仅仅意味着交点数组中取下一个即可(一种特殊情形就是当前交点是环的最后一个交点,则其下一个交点为当前环上的第一个交点)。找到下一个交点后,把当前交点与下一个交点之间的端点都加到新生成的环中去。然后以下一个交点为当前交点,继续进行判断,直到回到新生成的环的起点。
在图1所述的实施例中,当前的交点为A,对A进行判断,根据A的附属信息知道交点A为入点,因此沿着第一个矩形的方向前进,从第一个矩形的交点数组中前进,遇到了下一个交点B。然后把AB两交点之间的端点即c加到环的结构中去,再把B加进去,此时环的点包含AcB三个点。在上述操作中,由于在每个交点中都记录了该交点所在的段,因此可以很容易地得到AB之间的端点c。
步骤13、查找到下一个交点后,判断该交点与最初的交点是否一致,若一致,则认为找到了一个环,执行下一步,否则,重新执行步骤12。
在图1所述的实施例中,由上一步骤可知,当前找到的交点为B,显然,该交点不是最初的交点A,因此,需要重复对该交点的类型进行判断。由于交点B是出点,因此需要转换多边形,即转换到第二个矩形中,然后继续查找下一个交点,从前文可知,在第二个矩形中,根据矩形的方向所得到的排序后的交点为B-A,因此,继续查找到的下一个交点为A,而BA交点之间的多边形端点为f。由于交点A就是最初的交点,因此得到了一个环,该环用表4表示:
 AcBfA

表4
步骤14、对所得到的环进行判断,若环的方向为顺时针方向,则该环为外环,若环的方向为逆时针方向,则该环为内环,将所得到的外环存放到交结果的外环集合中,将所得到的内环存放到交结果的内环集合中。
在图1所述的实施例中,所得到的环A-c-B-f-A为顺时针方向,因此,将该环存放到交结果的外环集合中。
上述步骤是对存在交点的多边形间如何通过“交”操作求取叠加环的流程进行了说明,下面结合图2对不存在交点的多边形间如何通过“交”操作求取叠加环的流程进行说明。在对两组多边形求交时,由于两组多边形间是对称的,因此,对两组多边形的插入规则是一致的,可以对多边形的求交操作进行统一的说明。
在图2所示的实施例中,有红蓝两组多边形,红色多边形组包括多边形M、N、L,蓝色多边形组包括多边形E、F、G。其中,多边形M、N以及E、F都有内环。对图2而言,M、E的外环是产生交点的环,其余的皆为没有产生交点的环,对这些没有交点的环需要按照一定的插入规则插入到结果环集合中去。在图2所述实施例的基础上,对这一交操作的结果进行如下说明。
步骤20、在一个多边形组中,在没有交点的多边形的内环、外环上分别选择边界点作为代表点;
步骤21、将所选择的边界点与另一组多边形中的各个多边形进行比较,若该边界点在另一多边形组的多边形内部,则执行下一步,若该边界点在另一多边形组的多边形外部,则执行步骤23。
步骤22、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入交结果的外环集合中,若所述边界点是内环上的边界点,则将环写入交结果的内环集合中;最后结束操作。
步骤23、将所述边界点所在的环放弃,不写入结果中,结束操作。
根据上述步骤,在图2上,在红色多边形N上分别有外环和内环,所述的外环上有边界点w,在内环上有边界点z。在红色多边形M上有内环M1,在M1上取边界点s。根据上述的步骤,将红色多边形上的环的边界点与蓝色多边形组中的多边形进行位置比较,可以知道,上述的边界点w、z位于蓝色多边形的外部,因此N上的内环和外环都不插入结果中。而边界点s位于蓝色多边形E的内部,因此,M1插入结果中,由于M1为内环,因此插入到结果的内环集合中。图2中的其它多边形上的环也做类似的处理。
在构造叠加环的过程中,除了上述的“交”操作外,还包括“差”操作,在差操作的过程中,对于存在交点的多边形求差与不存在交点的多边形求差之间存在着联系,因此在本发明中统一进行说明。
步骤30、对多边形组中的多边形进行分类,将存在异色交点的多边形用一种标识进行标记,将只存在同色交点的多边形用另一种标识进行标记,将不存在任何交点的多边形用又一种标识进行标记。
在本步骤中,所述的异色交点是指该交点是由不同多边形组中的多边形相交得到的;所述的同色交点是指同一组多边形之间的“交点”;同一组多边形并没有真正相交,所谓的交点是指同一组多边形之间的邻接点。
步骤31、对上一步骤中分类得到的只存在同色交点的多边形以及不存在任何交点的多边形进行求差操作。
在本步骤中,与前述的求交过程相比,求差操作不是一个对称操作,因此在一次求差过程中,对于不同组的多边形的具体操作过程存在着差异。具体的说,在求差操作U-V中,对U中的内环与外环的插入操作与V中的内环与外环的插入操作相比,存在着差别。下面以U-V求差操作为例,对具体的实现步骤进行详细说明,在下列步骤中将矩形U称为源多边形组,而矩阵V称为擦除多边形组。
对于源多边形组中的多边形上的内、外环,其插入过程如下:
步骤31-1-1、在源多边形组中,在没有交点的多边形的内环、外环上分别选择边界点;
步骤31-1-2、将所选择的边界点与擦除多边形组中的各个多边形进行比较,若该边界点在擦除多边形组的多边形内部,则执行下一步,若该边界点在擦除多边形组的多边形外部,则执行步骤31-1-4。
步骤31-1-3、将所述边界点所在的环放弃,不写入结果中,结束操作。
步骤31-1-4、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入差结果的外环集合中,若所述边界点是内环上的边界点,则将环写入差结果的内环集合中;最后结束操作。
根据上述步骤,在图2的实施例中,源多边形组为红色多边形组,多边形N的内外环,多边形L的外环都是没有产生交点的环,在多边形N的外环上取边界点w,在多边形N的内环上取边界点z,在多边形L的外环上取边界点t。将三个边界点与擦除多边形组(蓝色多边形组)进行位置比较,边界点w、z在擦除多边形的外部,因此多边形N上的外环插入到结果的外环集合中,多边形N上的内环插入到结果的内环集合中。边界点t在擦除多边形E的内部,因此多边形L的外环不插入到结果中。源多边形组中的其它环进行类似的处理。
对于擦除多边形组中的多边形上的内、外环,其插入过程如下:
步骤31-2-1、在擦除多边形组中,在没有交点的多边形的内环、外环上分别选择边界点;
步骤31-2-2、将所选择的边界点与源多边形组中的各个多边形进行比较,若该边界点在源多边形组的多边形内部,则执行下一步,若该边界点在源多边形组的多边形外部,则执行步骤31-2-6。
步骤31-2-3、对多边形的类型进行判断,若所述多边形中没有任何交点,则执行步骤31-2-4,若所述多边形中只有同色交点,则执行步骤31-2-5;
步骤31-2-4;将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入差结果的内环集合中,若所述边界点是内环上的边界点,则将环写入差结果的外环集合中;最后结束操作。
步骤31-2-5、将所述边界点所在的环写入结果中,若所述边界点是外环上的边界点,则将环写入一个临时的内环集合中(一个与步骤31-2-4中所述的差结果的内环集合不同的集合),若所述边界点是内环上的边界点,则将环写入差结果的外环集合中;最后结束操作。在本步骤中,所涉及的临时内环集合可称为待拆分内环集合,它是一个与差结果的内环集合不相同的临时集合。
步骤31-2-6、将所述边界点所在的环放弃,不写入结果中,结束操作。
根据上述步骤,图2的实施例中,擦除多边形组为蓝色多边形组,多边形F的内外环,多边形G的外环都是没有产生交点的环,在多边形F的外环上取边界点k,在多边形F的内环上取边界点q,在多边形G的外环上取边界点j。将三个边界点与源多边形组(红色多边形组)进行位置比较,边界点k、q在源多边形的外部,因此多边形F的内外环不插入到结果中;边界点j在源多边形的内部,将多边形G的外环插入到结果中,在插入过程中,应当将多边形G的外环插入到结果的内环集合中。擦除多边形中的环进行类似的处理。
上述说明是对U-V求差操作的描述,对于V-U求差操作的实现过程与之类似,只是其中的源多边形组和擦除多边形组存在不同。
步骤32、对多边形组中的交点进行排序。这一排序过程在前文中已经做了详细说明,此处不再重复。
步骤33、根据交点以及待拆分的内环集合求差。仍然用U、V表示两个不同组中的多边形,用U-V为例对本步骤中的求差过程进行说明。值得注意的是,在本步骤中所提到的V表示一个多边形组中的至少一个多边形,这里统一用V表示。
步骤33-1、得到属于同一个多边形的所有异色交点,若交点是特殊类型的交点,则根据特殊类型的交点进行处理;否则,根据异色交点求多边形U中位于V外部的线段。在本步骤求取线段的过程中,可以根据U到V的出点入点进行判断。所述的U到V的出点入点信息在本发明中是已知信息,可以直接得到。
步骤33-2、根据异色交点求多边形V位于多边形U内部的线段。在本步骤中,可以根据V到U的出点入点对线段的组成进行判断。在本步骤中,V到U的出点入点信息同样是已知信息,可以直接得到。
步骤33-3、判断对于多边形U的待拆分的内环集合是否为空,若为空,则直接执行下一步,否则,对待拆分的内环集合中的待拆分内环按照环上的同色交点进行打断,生成各条线段;
步骤33-4、对步骤33-2所生成的线段,判断线段上是否存在同色交点,若存在同色交点,则根据同色交点将线段打断,使得最终任意一段线段间,不存在任何同色或异色交点。
步骤33-5、对上述步骤所得到的所有被打断的线段抵消重叠部分(即线串完全重合,并且方向相反);在本步骤中,所提到的所有被打断的线段具体包括:多边形U中位于V外部的线段、多边形V位于多边形U内部的且被打断的线段、U的待拆分内环按照环上的同色交点被打断的线段。由于重叠只发生在作为减数的擦除多边形产生的线段上,因此为了减少计算量,对重叠部分的抵消计算不包括多边形U中位于V外部的线段。并且,在对作为减数的擦数多边形产生的线段抵消后,对剩余的任一线段的所有点的顺序要反置,因为在作为结果环的构成部分时,这些线段的方向即点的顺序是与输入相反的。
步骤33-6、将取消重叠部分后的所有被打断的线段按照顺序依次连接,得到结果的外环部分,并添加到结果的外环集合中去。
为了便于理解,下面结合一个具体的实例,对步骤33的具体实现过程进行说明。
参考图3,对红色多边形U(图中用细线条表示红色多边形)与蓝色多边形V(图中用粗线条表示蓝色多边形)求差。在图3所描述的实例中,多边形V并不是一个多边形,而是由三个相邻的多边形组成,分别用V1、V2、V3表示。红色多边形与蓝色多边形之间存在着异色交点,而蓝色多边形与蓝色多边形之间则存在着用于表示临接的同色交点。在图4中,对U、V中所存在的同色交点和异色交点都进行了标记,其中的浅色点表示同色交点,其中的深色点表示异色交点。
首先,根据异色以及同色交点区分所有的多边形的环(此例中只有外环);U是有异色交点的环;V1,V3是有异色交点的环;V2是只有同色交点的环。
然后,对只有同色交点的环V2以及没有任何交点的环(此例中没有)进行插入;对V2而言,因为其位于U的内部,因此作为内环插入,不过,由于它具有同色交点,因此应当插入到待拆分的内环集合中去。
之后,根据异色交点求利用同色交点U位于V之外的线段,所得到的结果如图5(a)所示。
接着,再根据异色交点,得到位于U内部的V的线段部分,即V1、V3产生的线段,所得到的结果如图5(b)所示。
再次,对V2按照同色交点进行拆分,得到四部分,所得到的结果如图5(c)所示。
对V1,V3产生的线段利用同色交点进一步打断,如图5(d)所示,V1共得到三部分,V3共得到三部分。
之后对重合的并且方向相反的做抵消处理,抵消后的线段如图5(e)所示。然后对抵消后的剩余的作为被减数的擦除多边形生成的所有的线段的点的顺序反置。
最后,将所得到如图所示的R一段,B的共四段按照顺序首尾相接,得到最终的环,所得到的最终结果如图5(f)所示,即为由A产生的差,是由A被B1,B2,B3擦除一部分区域后得到的结果,将这个结果加到外环集合中去。
按照上述步骤,顺次扫描所有的交点,即可得到根据交点构造得到的外环。连同对没有产生交点的环的插入生成的外环与内环,构成了结果的所有内环与外环。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

一种面面叠加环构造方法.pdf_第1页
第1页 / 共31页
一种面面叠加环构造方法.pdf_第2页
第2页 / 共31页
一种面面叠加环构造方法.pdf_第3页
第3页 / 共31页
点击查看更多>>
资源描述

《一种面面叠加环构造方法.pdf》由会员分享,可在线阅读,更多相关《一种面面叠加环构造方法.pdf(31页珍藏版)》请在专利查询网上搜索。

本发明提供一种面面叠加环构造方法,包括对两个多边形组中的多边形进行交操作,以及对两个多边形组中的多边形进行差操作;其中,交操作包括:对产生交点的多边形环通过交点的出入属性查找多边形环;对没有产生交点的多边形环,根据代表点与另一组多边形间的关系,决定是否将该环插入到结果的环的集合中去;差操作包括:对多边形进行分类;对只存在同色交点以及不存在任何交点的多边形进行插入操作,得到差结果的内环集合、差结果的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1