一种面面叠加中的线段处理方法

文档序号:6460269阅读:474来源:国知局
专利名称:一种面面叠加中的线段处理方法
技术领域
本发明涉及GIS ( Geographical Information System,地理信息系统) 中的叠加分析领域,特别涉及一种面面叠加中的线段处理方法。
背景技术
地理信息系统(GIS)是一种十分重要的空间信息系统。它是在计算机 软、硬件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关 地理分布数据进行釆集、储存、管理、运算、分析、显示和描述的技术系统。 空间分析是GIS的重要组成部分,是GIS的灵魂,也是评价一个GIS功能 的主要指标之一。空间分析是基于地理目标的位置和形态特征的空间数据 分析技术,其目的是提取和发现隐含的空间信息和规律,是空间数据挖掘 和知识发现的基本方法之一。空间分析主要包括空间量算、关系查询、緩 冲分析、叠加分析、网络分析等内容,其中的叠加分析是本发明所要关注 的焦点。在常见的GIS系统中,采用分层方式组织地理景观,同一区域的 整个数据层集表达了该地区地理景观的内容。在对分层数据进行组合时釆 用了叠加分析。具体的说,叠加分析是将相关主题层组成的数据层进行叠 加产生一个新数据层的操作,其结果综合了原来的两层或多层要素所具有的 属性。叠加分析不仅包含空间关系的叠加,还包括属性关系的综合。
最基本的叠加分析是在两个图层上的操作,假设把第 一个图层叫做输入 图层,第二个图层叫做叠加图层,则输入图层与叠加图层之间互为对应图层, 即输入图层的对应图层为叠加图层,叠加闺层的对应图层为输入图层。在叠 加分析中,叠加图层必须为面图层,而输入图层可以是点、线或者面图层。 根据不同的输入图层的不同类型,叠加分析分为点面叠加、线面叠加和面面 叠力口。
在现有的面面叠加方法中,一4i包括以下流程
1、 求相交的面与面之间的交点;
2、 根据交点得到环,所得到的环分为内环与外环;
3、 根据所述的内环、外环进行匹配操作,得到结果多边形;4、利用结果多边形得到最终的叠加结果。
现有技术在实现上述流程时存在以下缺陷
首先,现有技术在实现上述的步骤1的求交点的过程中,仅仅是计算 交点的坐标,并把这个坐标按照其所在的位置插入到原来的多边形中去, 而后根据这些交点,再得到环。根据此类求交点的方法得到的环是没有任 何标记信息的,因此会给后续的内环外环的匹配、属性归属的判断等操作 带来不便,需要大量的额外计算。
其次,现有技术在实现步骤l时,对特殊类型的交点进行处理时也存 在不足。例如,当线段重合或者相交在端点时,要求交点就要采用微小改 变数据的方法,使得特殊类型的交点变成普通的交点。这种方法改变了数 据,造成结果不准确。

发明内容
本发明的目的是克服现有的面面叠加方法中,在求交点时只计算交点 的坐标而为后续操作带来大量额外计算的缺陷,从而提供一种在求交点坐 标的同时可得到其它附加属性的线段处理方法。
为了实现上述目的,本发明提供了 一种面面叠加中的线段处理方法,
包括以下步骤
步骤l)、输入多边形,所述多边形来源于两个多边形组; 步骤2)、拆分所述的多边形,得到多边形上的各条线段; 步骤3)、对步骤2)所得到的各条线段采用扫描线算法处理,得到所有
相交的线段;
步骤4 )、将步骤3 )所得到的所有相交的线段按照相交情况以及线段所 属的多边形组进行分类,得到四种类别redl—bluel、 red2—blue 1 、 redl—blue2 以及red2—blue2;其中的线段颜色表示线段所来源的多边形组;
步骤5)、对所有相交的线段按照步骤4)所划分的类别分别进行处理, 得到属于交点的点的坐标、交点所在的线段、交点是出点还是入点的信息、 记录交点排序大小的标志信息。
上述技术方案中,在所述的步骤4)中,对线段的四种类别做进一步 的分类,包括
在redl—blue2中,线段进一步分为两条蓝色线段在红色线段的异侧、 两条蓝色线段在红色线段的同侧、红色线段与 一条蓝色线段重叠;
7在red2j3luel中,线段进一步分为两条红色线段在蓝色线段的异侧、 两条红色线段在蓝色线段的同侧、蓝色线段与 一条红色线段重叠;
在red2—blue2中,线段进一步分为红色线段组与蓝色线段组之间不 存在交叉关系、红色线段组与蓝色线段组之间存在交叉关系、 一条红色线段 与一条蓝色线段重叠、两条红色线段分别与两条蓝色线段重叠。
上述技术方案中,在所述的步骤5)中,所述的交点是出点还是入点 的信息通过以下方法得到
步骤a)、将交点所在的线段分为第一线段与第二线段;
步骤b )、将所述的第 一线段上的第二个端点的位置与所述的第二线段 所在多边形上的局部线段的位置进行比较,若所述第二个端点在所述局部 线段的内侧,则所述交点为入点,若所述第二个端点在所述局部线段的外 侧,则所述交点为出点。
上述技术方案中,所述的交点排序大小的标志信息包括对红色线段的 交点排序大小的标志信息,以及对蓝色线段的交点排序大小的标志信息; 其中,
所述的对红色线段的交点排序大小的标志信息利用所述红色线段经 过所述交点进入或离开所述蓝色线段所在多边形的信息得到,所述交点若 离开所述蓝色线段所在多边形,则与具有相同坐标值的点相比,所述交点 标记为顺序在前,所述交点若进入所述蓝色线段所在多边形,则与具有相 同坐标值的点相比,所述交点标记为顺序在后;
所述的对蓝色线段的交点排序大小的标志信息利用所述蓝色线段经 过所述交点进入或离开所述红色线段所在多边形的信息得到,所述交点若 离开所述红色线段所在多边形,则与具有相同坐标值的点相比,所述交点 标记为顺序在前,所述交点若进入所述红色线段所在多边形,则与具有相 同坐标值的点相比,所述交点标记为顺序在后。
上述技术方案中,在redl—bluel中,两条线段相交的点为交点,两条 线段为交点所在的线段。
上述技术方案中,在redl—blue2中,当两条蓝色线段在红色线段的异 侧时,线段间相交的点为交点, 一条红色线段以及在所述红色线段所在多 边形内部的蓝色线段为交点所在的线段。
上述技术方案中,在redl一blue2中,当两条蓝色线段在红色线段的同 侧时,红色线段与蓝色线段相交的点不属于交点。
8上述技术方案中,在redl一blue2中,当红色线段与一条蓝色线段间存 在重叠时,判断红色线段与所述重叠的蓝色线断间的方向,若所述红色线 段与所述重叠的蓝色线段之间方向相反时,所述蓝色线段与所述红色线段 之间相交的点不属于交点;若所述红色线段与所述重叠的蓝色线段之间方 向相同时,所述蓝色线段与红色线段之间相交的点属于交点,记录与交点 相关的信息。
上述技术方案中,当所述蓝色线段与所述红色线段之间相交的点属于 交点时,所述红色线段以及不与所述红色线段重叠的蓝色线段为交点所在 的线段。
上述技术方案中,当所述蓝色线段与所述红色线段之间相交的点属于 交点时,根据交点所在的线段,判断所述交点是出点还是入点;
在判断过程中,选择红色线段上非交点的端点,若该端点为所述红色 线段上的第二个端点,且在所述非重叠的蓝色线段的内侧时,交点为入点, 若该端点为所述红色线段上的第二个端点,且在所述非重叠的蓝色线段的 外侧时,交点为出点;若红色线段上非交点的端点为所述红色线段上的第一 个端点,且在所述非重叠的蓝色线段的内侧,交点为出点,若红色线段上非 交点的端点为所述红色线段上的第 一个端点,且在所述非重叠的蓝色线段的 外侧,则交点为入点。
上述技术方案中,在Red2_bluel中,当两条红色线段在蓝色线段的同 侧时,红色线段与蓝色线段相交的点不属于交点。
上述技术方案中,在Red2-bluel中,当两条红色线段在蓝色线段的异 侧时,红色线段与蓝色线段相交的点属于交点;蓝色线段以及在蓝色线段 对应多边形内部的红色线段为交点所在的线段。
上述技术方案中,判断所述交点为出点还是入点时,根据交点所在线 段的情况直接进行判断;若线段所在多边形方向上的第二条红色线段为交 点所在的线段,则交点为入点,若线段所在多边形方向上的第一条红色线 段为交点所在的线段,则交点为出点。
上述技术方案中,在Red2_bluel中,当蓝色线段与一条红色线段间存 在重叠时,判断蓝色线—提与所述重叠的红色线断间的方向,若所述蓝色线 段与所述重叠的红色线段之间方向相反时,所述红色线段与所述蓝色线段 之间相交的点不属于交点;若所迷蓝色线段与所述重叠的红色线段之间方 向相同时,所述蓝色线段与红色线段之间相交的点属于交点,记录与交点
9相关的信息。
上述技术方案中,当所述蓝色线段与红色线段之间相交的点属于交点 时,蓝色线段以及不与所述蓝色线段重叠的红色线段为交点所在的线段。
上述技术方案中,当所述蓝色线段与所述红色线段之间相交的点属于 交点时,根据交点所在的线段,判断所述交点是出点还是入点;
在判断过程中,选择蓝色线段上非交点的端点,若该端点为所述蓝色 线段上的第二个端点,且在所述非重叠的红色线段的内侧时,交点为入点, 若该端点为所述蓝色线段上的第二个端点,且在所述非重叠的红色线段的
外侧时,交点为出点;若蓝色线段上非交点的端点为所述蓝色线段上的第一 个端点,且在所述非重叠的红色线段的内侧,交点为出点,若蓝色线段上非 交点的端点为所述蓝色线段上的第 一个端点,且在所述非重叠的红色线段的 外侧,则交点为入点。
上述技术方案中,在red2_blue2中,当红色线段组与蓝色线段组之间 不存在交叉关系,则红色线段与蓝色线段相交的点不属于交点。
上述技术方案中,在red2一blue2中,当红色线段组与蓝色线段组之间 存在交叉关系,红色线段与蓝色线段相交的点属于交点,选取在不同组的线 段所生成的多边形内部的线段作为产生交点的线段。
上述技术方案中,在red2—blue2中,当一条红色线段与一条蓝色线段 重叠时,对于不重合的蓝色线段与红色线段,首先判断不重合的线段的端点 是否在另一组线段所生成的多边形的内部,只要有一条不重合的线段的端点 在另一组线段所生成的多边形的内部,则认为线段相交的点属于交点;若两 条不重合的线段的端点都不在另一组线段所生成的多边形的内部,则认为线 段之间的点不属于交点。
上述技术方案中,当线段之间相交的点的交点时,如果不重合的红蓝 线段都在对方线段所形成的多边形内部,则这两条不重合的线段就是交点所 属的线段;如果第 一组中的不重合的线段在对方线段所形成的多边形内部, 而第二组中不重合的线段在对方线段所形成的多边形的外部,则第 一组中的 不重合线段与第二组中的重合线段为交点所属的线段。
上述技术方案中,在red2一blue2中,当两条红色线段分别与两条蓝色 线段重叠时,当所述红色线段与所述蓝色线段间不是恰好完全重合时,线段 之间的点不属于交点;当所述红色线段与所述蓝色线段恰好完全重合时,记 录交点以及用于表示同向完全重合或异向完全重合的标记信息。本发明的优点在于
1 、本发明的面面叠加中的线段处理方法通过对过同 一点的线段进行分 类,然后对不同类型的线段进行处理,得到了包含交点坐标、交点所在线段、 交点是出点还是入点,以及交点排序大小的标志信息等多种属性,有利于面 面叠加中的后续操作。
2 、本发明的面面叠加中的线段处理方法对于一些特殊类型的交点的处理。


以下,结合附图来详细il明本发明的实施例,其中 图1为本发明中所采用的扫描线算法的流程图; 图2为本发明的方法中对过同 一点的线段的类型划分情况的说明; 图3为本发明的方法中对两条线段相交时如何确定交点的出入属性的 说明;
图4为在一个实施例中如何确定交点排序大小的标志信息的示意图5为在一个实施例中如何确定同组两条线段间的顺序的示意图6为对于两条蓝色线段与两条红色线段在同一个点上相交时,如何确
定交点所属线段的示意图7为对于两条蓝色线段与两条红色线段在同一个点上相交时,在确定
交点所属线段时涉及到内侧和外侧,如何确定内侧和外侧的示意图; 图8为本发明的面面叠加中的线段处理方法的流程图。
具体实施例方式
下面结合附图和具体实施方式
,对本发明的基于扫描线的面面叠加线 段处理方法加以说明。
在对本发明的方法做详细说明前,首先对本发明中所涉及的相关概念 进行说明。
(l)扫描线算法扫描线算法是一种输出线段交点的算法,它的输 入信息是一系列的线段,它的输出信息是这些线段间的交点。在本发明中 所涉及的扫描线算法与传统的扫描线算法相比,做了一定的改进,在下文 中所涉及的扫描线算法都是指在本发明中所采用的经过改进的扫描线算
li法。在图1中,对这种经过改进的扫描线算法做了相应的说明。所述扫描
线算法包括以下步骤
a、 做初始化操作,在初始化操作过程中,用所有输入线段的端点初 始化事件点结构Q,并对初始化后的事件点结构Q根据端点的坐标做排序; 初始化当前激活线段束R为空集合;设定当前所有线段有序集合为S;设定当 前输出交点集合I为空集合。
扫描线算法的基本思想是采用一条虚拟的竖直直线(即扫描线)从左到 右顺次扫描所有线段,直到结束。在这一扫描过程中,与扫描线相交的线段 为所述的当前激活线段。所述的当前所有线段有序集合是指从输入的几何要 素读取得到的线段,例如,对于任一多边形,把多边形的组成线段插入到此 集合中去,当所有线段读取结束后,要按照线段的左端点(对竖直线则是其 下端点)按照从左到右、从下到上的顺序进行排序。
b、 判断Q是否是空,如果是空集合,则计算结束,I即为计算而得的交 点的集合;否则循环以下操作直至Q是空集合。
c、 从Q中取得坐标值最小的事件点p,并将其从Q中删除。
d、 查找R中以p为终点的线段,把该线段存取到临时线段集合segs中 后,在R中依次删除上述线段;在删除过程中,R的顺序会发生改变,被删 除线段的两相邻线段由不相邻转变成相邻,计算可能存在的交点,并添加到 Q中。
e、 查找R中经过事件点p的线段,把查找到的线段存取到临时线段集 合segs中,此时的事件点p为正常相交的交点,输出交点到I;将所查找到 的线段的顺序反置,当R的顺序发生变化后,线段最上端与最下端的线段有 了新的相邻线段,计算可能的交点,并添加到Q中。
f、 从S中选取从点p起始的线段,在S中删除,加入到R中,把所选 取的线段加入到segs中去,新插入的线段会导致R中线段顺序的变化,计 算新插入的线段与其相邻线段间可能的交点,并将所得到的交点添加到Q中。
g、 Segs中的所有线段就是过当前交点的线段,包括起点、终点在当前 交点以及经过当前交点的线段。把segs返回,供用户提供合适的处理方式 处理。
从上述描述可知,通过本发明的扫描线算法所得到的计算结果中包括有 通过某一交点的线段的信息,关于该线段的信息包括线段的起点坐标、终点 坐标、线段所属的多边形的ID、线段所属的环的ID (—个多边形可能有内环,环的个数可能不是l)以及所属的段的ID等信息。交点的结构包括坐
标值、产生交点的两条线段(线段的结构稍后介绍)、交点是出点还是入点 以及交点碰到相同坐标值的交点时的排序信息。
(2)出点和入点面面之间的交点可分为出点和入点,判断两个线 段之间的交点是出点还是入点,可根据线段在线段方向上的第二个端点与 多边形的局部线段间的关系得到,即若第二个端点在当前局部线段的内侧, 为入点;否则为出点。在上述的判断过程中,线段都是有方向的,每条线段 都有两个端点,沿着线段方向的第 一个端点就是本申请中所涉及的第 一个端 点,相应的,沿着线段方向的第二个端点就是本申请中所涉及的第二个端点。 上述的局部线段是指过同一点,且与第二个端点所在线段属于不同组多边形 的线段。上述描述中,对出点和入点的判断给出了一个总体的判断标准,在 后续的描述中,将会根据具体情况,给出出点和入点的详细判断过程。
下面结合图8对本发明的方法做详细说明。本发明的方法包括以下步骤
步骤10、输入多边形,所输入的多边形包括多边形的方向、多边形的 ID、多边形中各个环所包含的点的坐标等信息。
本发明的方法用于面面叠加过程中,因此,在本步骤中所输入的多边形 根据来源可分为两组,从输入图层得到的多边形为一组,从叠加图层得到的 多边形为另一组。在本领域中,通常用颜色标定不同来源的多边形,例如, 用红色标记一组多边形,用蓝色标记另一组多边形。在本申请中,同样用颜 色标记不同的多边形,但鉴于在说明书附图中无法直接用颜色表示多边形组 间的不同,因此,在说明书附图中,用多边形中的线段的粗细来表示不同的 多边形。此外,在每组的多边形中,可以有多个多边形。
步骤20、对所输入的多边形进行拆分,得到相应的线段。所得到的线段 的信息包括颜色(即输入的第一组多边形还是第二组多边形),所属的多 边形的ID,所属的环的ID (—个多边形可能有多个环),所在环的线段ID (即在某个环上是第几段),以及此线段的两个端点的坐标值。本步骤中对 多边形进行拆分的操作是成熟的现有技术,在本申请中不做详细说明。
步骤30、釆用扫描线算法对步骤20所得到的线段进行处理,得到相应 的计算结果。在所述的计算结果中,包括有通过各个交点线段的情况。扫描 线算法的具体实现步骤以及所得到的结果在前文中已经有详细的说明,此处 不再进4于i羊细的i兌明。
步骤40、对步骤30所得到的各个线段按照相交情况进行分类。在分类时,具体包括以下步骤
步骤41、按照线段的颜色对线段进行分组;在前文中已经提到,本实施 方式中,将线段分为红色组与蓝色组。
步骤42、在对线段根据颜色分组的基础上,在每一组中,根据线段所属 多边形的不同进行二次分组,将属于同 一个多边形的环的线段放在一小组 中。
步骤43、对两大组间的小组,两两进行计算(同一大组之内的小组不 计算),对过同一点的线段,得到四种可能的情形,redl—bluel、 red2—bluel、 redl—blue2以及red2—blue2。
步骤44、在步骤43得到的四种可能情形的基础上,在每一种情形的 内部,根据不同颜色线段之间的关系,以及线段间的位置关系,对过同一 点的线段做了进一步的划分。在图2中对过同一点的线段的四种可能情形 以及四种可能情形的进一步划分分别做了说明,在该图中,用细线条表示 红色线段,用粗线条表示蓝色线段。
步骤50、在步骤40对过同一点的线段进行分类的基础上,根据线段 的类型对线段进行处理,并记录相应的信息。在处理过程中,主要记录以 下4类信息交点的点的坐标、交点所在的线段、交点是出点还是入点的 信息、记录交点排序大小的标志信息。鉴于不同类中,求取上述信息的实 现方法存在差异,因此按照不同的类别,分别进行说明。
i、 Redl_bluel:红蓝各一条线段相交时,两条线段相交的点即为交点, 记录该点到交点列表中,记录到交点列表中的与交点相关的信息包括交点 的坐标值、产生此交点的两条线段、交点的出入属性(即红色线段从此交点 走入还是走出蓝色线段所在的多边形)以及交点排序大小的标志信息。
在对所述交点是出点还是入点进行判断时,可能会因为判断对象的不 同而产生不同的判断结果。例如,在本发明中,在一个交点上存在蓝色线 段与红色线段,因此, 一个交点可能是红色线段出入蓝色线段所在多边形 的点,也可能是蓝色线段出入红色线段所在多边形的点。在本发明中,所 述的出点或入点是用来表示红色线段走出或走入蓝色多边形的点。在前文 中,曽经对出点、入点的判断方法做过简要的说明,下面结合实例,对出 点和入点的判断过程进行详细的说明。
如图3所示,假设有两条线段A、 B相交,它们的交点为C,线段A 的方向为向右,而线段B的方向为向上。下面需要判断交点C为出点还是
14入点。通常而言, 一个交点是入点,就表示一条线段在经过该交点后进入 到一个多边形的内部,而一个交点是出点,就表示一条线段在经过该交点 后走出多边形的内部。因此,要判断交点C是出点还是入点,就要看线段
A是要通过点C进入线段B所在多边形的内部还是走出线段B所在多边 形的内部。从图3可以知道,C点为入点。但在实际判断过程中,通常并 不能直接知道线段B所在多边形的形状与位置,对于线段B而言,它既可 能如图3所示,为其所在多边形区域左侧的边(即边的右侧是多边形内部 区域),也可能是所在多边形右侧的边。如果线段B是其所在多边形右侧 的边,则点C则为出点。因此,在本发明中给出了根据线段的方向判断两 个线段间的交点是出点还是入点的判断方法若线段的第二个端点在相交 线段的内侧,则交点为入点,若线段的第二个端点在相交线段的外侧,则交 点为出点。采用上述方法进行判断时, 一个前提条件是线段所作的多边形 的方向是固定的。在本发明中,假设线段所作多边形的方向为顺时针方向。 因此,根据线段的方向就可以知道所在多边形的大体位置。例如,已知线 段B的方向向上,则按照顺时针方向,线段B所在多边形与图3中的多边 形相同。在确定多边形方向后,就可以对内侧和外侧进行判断。在判断所 述的内侧或外侧时,与相交线段的方向有关。例如,图3中的线段B的方 向向上,则线段B的右侧就是所述的内侧,假如线段B的方向向下,则线 段B的左侧是所述的内侧,而线段B的右侧为外侧。需要说明的是,在上 述判断过程中,在判断的第二个端点是否在相交线段的内侧时,并不意味 着所述的第二个端点必须在相交线段所在多边形的内部,仍然以图3为例, 线段A的第二个端点在线段B所在多边形的外部,但由于该端点在线段B 的右侧,因此仍然可以认为第二个端点在线段B的内侧,使得交点C为入 点。通过上述说明可以知道,利用两个带有方向的相交线段,可以知道两 条相交线段的交点是出点还是入点。
记录交点排序大小的标志信息针对的是当前线段所代表的多边形邻 接的情况。如图4所示, 一个蓝色多边形上的线段与两个相邻的红色多边 形相交,因此对于蓝色线段而言,在同一个位置有两个相同坐标的交点。对 于这两个交点的顺序,可以意识上认为两个红色多边形中间有道狭小的缝 隙,从而实现两个交点的先后顺序。但是,对于计算机而言,需要计算以标 志这种信息。
在实际应用中,所述的交点排序大小的标志信息分为两类, 一类是蓝色线段在红色多边形上的交点排序大小的标志信息,另 一类是红色线段在蓝色 多边形上的交点排序大小的标志信息。以蓝色线段在红色多边形上的交点排
序大小的标志信息为例,结合图4,对排序过程做如下说明对于蓝色线段, 如果一个交点对于一个红色多边形为入点,则该点的顺序靠后,标记为 ip_blue-big;若一个交点对于另一个红色多边形为出点,则该点的顺序靠 前,标记为ip-blue-small。对于红色线段在蓝色多边形上的交点排序大小 的标志信息的判断与之相类似,对于顺序靠后的点标记为ip-red—big,对于 顺序靠前的点标记为ip-red-small。
应当注意的是,用于记录交点排序大小的标志信息虽然只有在一个线段 经过两个相邻多边形时才具有实际的意义,但这一标志信息每次都要进行相 关的计算。
ii、 Redl_blue2:—条红色线段与两条蓝色线段相交的情况。从图2 中可以看出,这种情况可以进一步细分为三种情形。
第 一种情形为两条蓝色线段在红色线段的异侧,此时三条线段相交的 点为交点,将该交点记录到交点列表中,并将产生交点的红蓝线段的相关信 息也加以记录。在记录交点所在的线革殳时,由于交点所在的线段只能有两条, 因此需要从两条蓝色线段中选择一条作为与红色线段相交的线段。在具体选 择时,选取在红色线段对应的多边形内部的蓝色线段作为产生交点的线段, 其中,所述的内部是通过判断蓝色线段的非交点的端点是否在红色线段的内 侧得到的。在具体判断时,从蓝色线段上选取一个非交点的端点,比如选取 第二条蓝色线段的第二个端点,若此点在红色线段的内侧,则所述的第二条 蓝色线段与所述的红色线段就是产生交点的线段,否则第 一条蓝色线段与红 色线段为产生交点的线段。
在上文中,所述的第 一条蓝色线段和第二条蓝色线段是根据线段本身的 ID得到的,实际上,通过线段方向也可以对线段的顺序进行区分,例如,沿 着线段方向的第一条蓝色线段就是所述的第一条蓝色线段。如图5所示,两 条蓝色线段分别用x、 y表示,红色线段用z表示。由于蓝色线段x、 y来自 同一个多边形,且两者是相邻的边,因此按照多边形的方向,两条线段之间 必然有一个顺序。在图5中,线段方向如箭头所示,因此两条线段间的顺序 也可以按照箭头所示的方向确定,即线段x为第一条蓝色线段,线段y为第 二条蓝色线段。此外,根据线段的ID也可以确定线段间的顺序。例如,在 表示线段的数据结构中,每条线段都有各自的段号,用于表示线段是环中的
16第几条线段,所述段号通常用整数表示,从0开始,按顺序逐渐递加。对于
任意两个邻接线段,它们的段号必然是相邻的,比如说是4、 5,则段号为4 的线段在前,为第一线段,段号为5的线段在后,为第二线段。 一种特殊情 形是当一条线段的段号为M (即最大段号,0~M,共有M+1条边),另一条 线段的段号为0,即多边形的最后一条边与第一条边(序号为Q)。此时不再 简单根据段号的大小比较,而是段号为M的在前,段号为0的在后。
综上所述,对于任意两个段号为X、 Y的线段,它们之间的顺序判断方 法如下
(1) 、若X或者Y之一为零,并且另一个值不是l,则说明是最后一条 线段与第一条线段,则段号为零的排在后边;
(2) 、其余的情形,按照X、 Y的大小值判断,段号小的在前,段号大 的在后。
在得到交点所在的线段后,还需要对交点是出点还是入点进行判断。判 断交点是出点还是入点的方法在前文中已经有详细说明,此处不再重复。
在完成对交点类型的判断后,还可以根据交点的类型得到交点排序大,J、 的标志信息,并对该信息进行记录。交点顺序大小的标志信息根据线段所在 组的不同而存在差异。红色多边形的排序信息,可根据出入点属性得到,红 色线段必然先走出 一个蓝色多边形然后才走入另 一个蓝色多边形,即对于具 有相同坐标值的交点,出点在前,入点在后;即入点遇到相同坐标值的交 点时,此点需要排在后边,也就是要加一个ip_red_big的标记,相反的, 出点遇到相同坐标值的交点时,此点需要排在前边,也就是要加一个 ip-red-small的标记。对于蓝色多边形的排序信息,则需要计算。计算的原 则类似于计算蓝色线段从此点进入还是走出红色多边形,同样是出点在前, 添力口 ip—blue_big的才示i己,入,泉在后,添力口 ip—blue — sma 11 。
第二种情形为两条蓝色线段在红色线段的同侧,在此种情况下,蓝色 线段与红色线段之间相交的点不属于交点,因此,无需记录该点的坐标信 息,相应的也就不需要进行点类型的判断。
第三种情形为红色线段与 一条蓝色线段之间存在重叠的情况。在此种 情况下,需要进一步分情况讨论。假如红色线段与重叠的蓝色线段之间方 向相反,则蓝色线段与红色线段之间相交的点不属于交点,不记录与该点 相关的信息。假如红色线段与重叠的蓝色线段之间的方向相同,表明二者 所代表的多边形必然有重合区域,则蓝色线段与红色线段之间相交的点属
17于交点,记录该交点的坐标信息以及所属的线段。在记录交点所在的纟^段 时,将红色线段以及不与红色线段重叠的蓝色线段作为交点所属的线段。 根据交点所属线段的方向,对所述交点是出点还是入点进行判断,然后根 据判断的结果得到交点排序大小的标志信息,并对该信息进行记录。其中, 在判断出点入点时,首先选取红色线段的非交点的端点,该端点根据红色线 段的方向,可能是第一个端点,也可能是第二个端点。对应上述两种可能, 其出入属性恰好相反。不妨假设非交点的端点是第二个端点。则判断该端点 与不重叠的蓝色线段的关系,若在内侧,即第二个端点在蓝色线段的内侧,
则交点为入点;若在外侧,即第二个端点在蓝色线段的外侧,则交点为出点。
以上假设非交点的端点是第二个端点。若非交点的端点是第一个端点,则出 入属性反置即可。
iii、 Red2—bluel:两条红色线段与一条蓝色线段相交的情况。此种情况 与上一种的Redl_blue2相类似,对其的处理也基本相同,参考图2对其中 的三种情况分别进行说明。
第 一种情况为两条红色线段在蓝色线段的同侧,此时不具有交点。 第二种情况为两条红色线段在蓝色线段的异侧,此时存在交点,记录
交点的信息,以及交点所在的线段的信息。在记录交点所在线段的信息时, 选取在蓝色线段对应的多边形内部的红色线段作为产生交点的线段。根据产 生交点的线段对交点是出点还是入点进行判断,根据判断的结果得到交点排 序大小的标志信息,并对该信息进行记录。其中,在得到交点所在的线段 后,可直接对交点是出点还是入点进行判断。例如,在两条红色线段中, 若第二条红色线段为交点所在的线段,则交点为入点,若第一条红色线段 为交点所在的线段,则交点为出点。
第三种情况为蓝色线段与一条红色线段之间存在重叠的情况。在此种 情况下,需要进一步分情况讨论。假如蓝色线段与重叠的红色线段之间方 向相反,则蓝色线段与红色线段之间相交的点不属于交点,不记录与该点 相关的信息。假如蓝色线段与重叠的红色线段之间的方向相同,则蓝色线 段与红色线段之间相交的点属于交点,记录该交点的坐标信息以及所属的 线段。在记录交点所属的线段时,将蓝色线段以及不与所述蓝色线段重叠 的红色线段作为交点所属的线段。根据交点所属线段的方向,对所述交点 是出点还是入点进行判断,然后根据判断的结果得到交点排序大小的标志 信息,并对该信息进4于记录。iv、 Red2—blue2:两条红色线段与两条蓝色线段相交的情况。与前面的 情况相比,此类情况更为复杂,下面分别进行说明。如图2所示,根据线段 之间的关系,可分为三组第一组是四条线段间都存在接触关系,第二组是 在线段间的 一条蓝色线段与 一条红色线段重叠,第三组是线段间的两条蓝色 线段与两条红色线段分别重叠。
在第一组中,可进一步分为两种情况, 一是红色线段组与蓝色线段组之 间不存在交叉关系,此时认为线段间相交的点不属于交点;二是红色线段组 与蓝色线段组之间存在交叉关系,此时,线段间相交的点属于交点,记录该 点的坐标信息以及交点所在的线段。在记录交点所在的线段时,由于在两个 线段组中各有两条线段,因此,需要在两个线段组中各选择一条线段作为交 点所在的线段,选择原则如下选取在不同组的线段所生成的多边形内部的 线段作为产生交点的线段。与前文相类似,所述的内部也是通过非交点的端 点是否在当前异色线段的内侧进行判断。图6中,对此类情况下如何选择交 点所属的线段进行了说明。在该图中,有两条红色线段a、 b(用细线表示), 有两条蓝色线段c、 d(用粗线表示),四条线段相交的点为E,下面要知道 点E是哪些线段的交点。以红色线段a、 b为例,要知道这两条线段中哪一 条线段是交点所在的线段,可以在两条线段中按照线段的顺序选择第二条线 段上的第二个端点(线段间的顺序在输入多边形时已经确定),在本实施例 中,第二条线段为线段b,然后判断所选择的端点在当前局部线段的内侧还 是外侧,若在内侧,则表明所述的第二条线段就是交点所属的线段,若在外 侧,则表明第二条线段不是交点所属的线段,即第一条线段是交点所属的线 段。
在上述判断过程中,当前局部线段的含义在前文中已经有了相应的说 明,而所述的内侧和外侧的判断则与当前局部线段的方向有密切的关系。如 图7所示,当前局部线段的方向可能为如图7(a)所示的顺时针方向,也可 能为图7 (b)所示的逆时针方向。当前局部线段呈顺时针方向时,所形成的 多边形如图7(a)中的虚线所示,对于第二条线段的第二个端点,只有该点 同时在当前局部线段的右侧时才是在多边形的内部,如图中的红色点(也就 是大小较小的点);而当前局部线段呈逆时针方向时,所形成的多边形如图7 (b)中的虚线所示,此时,对于第二条线段的第二个端点,只有该点同时 在当前局部线段的左侧时才是在多边形的内部,如图中的红色点(较小的 点)。结合图6中的实例,假设蓝色线段的方向为顺时针方向,则线段a、 b 中线段a是交点所属的线段。同样的,假设红色线段的方向为顺时针方向, 则线段c 、 d中的线段c是交点所属的线段。
得到交点所在的线段后,可根据上述的出点、入点判断标准判断交点是 出点还是入点,并根据出点、入点信息得到交点排序大小的标志信息。这 一过程在前文中已经有详细说明,此处不再重复描述。
在第二组中,虽然^f艮据重叠线段的末端间的关系,可分为末端超出、末 端重合和末端缩进三种类型,i^旦三种类型的处理方法都相同,此处进行统一 说明。在第二组中, 一条红色线段与一条蓝色线段重合,对于不重合的红色 线段和蓝色线段,首先判断不重合的线段的端点是否在另一组线段所生成的 多边形的内部,只要有一条不重合的线段的端点在另一组线段所生成的多边 形的内部,就认为四条线段相交的点属于交点,反之,则认为线段之间的点 不属于交点。上述的端点是否在另一组线段所生成的多边形内部的具体判断 过程在前文中已经有详细的说明,具体实现可参考前述的说明。
当线段之间的点为交点时,需要对交点所在的线段进行判断。在判断过 程中,如果不重合的红蓝线段都在对方线段所形成的多边形内部,则这两条 不重合的线段就是交点所属的线段;如果第 一组中的不重合的线段在对方线 段所形成的多边形内部,而第二组中不重合的线段在对方线段所形成的多边 形的外部,则第 一组中的不重合线段与第二组中的重合线段为交点所属的哉 段。
得到交点所属的线段后,还可以进一步判断交点是出点还是入点,并根 据出点、入点信息得到交点排序大小的标志信息。
在第三组中,根据线段末端关系的不同(末端超出、重合、缩进),可 以将该组进一步划分为9种情形,对9种情形的处理过程基本一致。对于线 段不是两两恰好完全重合的8种情形,则线段之间的点不属于交点。而对于 线段两两恰好完全重合的情形,需要根据当前线段所在的环去判断是否完 全重合。若所在的环完全重合,则记录当前交点,并根据当前边的方向是 否相同 "i殳置标记信息 same — dir —complete —the — same 或 者 diff-dir_complete—the — same,即同向或者异向完全重合。在石並到这才羊的 交点时,根据叠加操作,或者输出多边形,或者不输出而仅仅把多边形设 置访问标记,表明已经参与过计算了,只是没有产生结果。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。
20尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理 解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案 的精神和范围,其均应涵盖在本发明的权利要求范围当中。
权利要求
1、一种面面叠加中的线段处理方法,包括以下步骤步骤1)、输入多边形,所述多边形来源于两个多边形组;步骤2)、拆分所述的多边形,得到多边形上的各条线段;步骤3)、对步骤2)所得到的各条线段采用扫描线算法处理,得到所有相交的线段;步骤4)、将步骤3)所得到的所有相交的线段按照相交情况以及线段所属的多边形组进行分类,得到四种类别red1_blue1、red2_blue1、red1_blue2以及red2_blue2;其中的线段颜色表示线段所来源的多边形组;步骤5)、对所有相交的线段按照步骤4)所划分的类别分别进行处理,得到属于交点的点的坐标、交点所在的线段、交点是出点还是入点的信息、记录交点排序大小的标志信息。
2、 根据权利要求1所述的面面叠加中的线段处理方法,其特征在于, 在所述的步骤4)中,对线段的四种类别做进一步的分类,包括在redl—blue2中,线段进一步分为两条蓝色线段在红色线段的异侧、 两条蓝色线段在红色线段的同侧、红色线段与 一条蓝色线段重叠;在red2—bluel中,线段进一步分为两条红色线段在蓝色线段的异侧、 两条红色线段在蓝色线段的同侧、蓝色线段与一条红色线段重叠;在red2_blue2中,线段进一步分为红色线段组与蓝色线段组之间不 存在交叉关系、红色线段组与蓝色线段组之间存在交叉关系、 一条红色线段 与 一条蓝色线段重叠、两条红色线段分别与两条蓝色线段重叠。
3、 根据权利要求2所述的面面叠加中的线段处理方法,其特征在于, 在所述的步骤5)中,所述的交点是出点还是入点的信息通过以下方法得 到步骤a)、将交点所在的线段分为第一线段与第二线段; 步骤b)、将所述的第一线段上的第二个端点的位置与所述的第二线段 所在多边形上的局部线段的位置进行比较,若所述第二个端点在所述局部 线段的内侧,则所述交点为入点,若所述第二个端点在所述局部线段的外 侧,则所述交点为出点。
4、 根据权利要求3所述的面面叠加中的线段处理方法,其特征在于, 所述的交点排序大小的标志信息包括对红色线段的交点排序大小的标志信息,以及对蓝色线段的交点排序大小的标志信息;其中,所述的对红色线段的交点排序大小的标志信息利用所述红色线段经 过所述交点进入或离开所述蓝色线段所在多边形的信息得到,所述交点若 离开所述蓝色线段所在多边形,则与具有相同坐标值的点相比,所述交点 标记为顺序在前,所述交点若进入所述蓝色线段所在多边形,则与具有相同坐标值的点相比,所述交点标记为顺序在后;所述的对蓝色线段的交点排序大小的标志信息利用所述蓝色线段经 过所述交点进入或离开所述红色线段所在多边形的信息得到,所述交点若 离开所述红色线段所在多边形,则与具有相同坐标值的点相比,所述交点 标记为顺序在前,所述交点若进入所述红色线段所在多边形,则与具有相 同坐标值的点相比,所述交点标记为顺序在后。
5、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在redl—bluel中,两条线段相交的点为交点,两条线段为交点所在的线段。
6、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在redl—blue2中,当两条蓝色线段在红色线段的异侧时,线段间相交的点 为交点, 一条红色线段以及在所述红色线段所在多边形内部的蓝色线段为 交点所在的线段。
7、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在redl—blue2中,当两条蓝色线段在红色线段的同侧时,红色线段与蓝色 线段相交的点不属于交点。
8、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在redl—blue2中,当红色线段与 一条蓝色线段间存在重叠时,判断红色线 段与所述重叠的蓝色线断间的方向,若所述红色线段与所述重叠的蓝色线 段之间方向相反时,所述蓝色线段与所述红色线段之间相交的点不属于交 点;若所述红色线段与所述重叠的蓝色线段之间方向相同时,所述蓝色线 段与红色线段之间相交的点属.于交点,记录与交点相关的信息。
9、 根据权利要求8所述的面面叠加中的线段处理方法,其特征在于, 当所述蓝色线段与所述红色线段之间相交的点属于交点时,所述红色线段 以及不与所述红色线段重叠的蓝色线段为交点所在的线段。
10、 根据权利要求9所述的面面叠加中的线段处理方法,其特征在于, 当所述蓝色线段与所述红色线段之间相交的点属于交点时,根据交点所在 的线段,判断所述交点是出点还是入点; 、3在判断过程中,选择红色线段上非交点的端点,若该端点为所述红色 线段上的第二个端点,且在所述非重叠的蓝色线段的内侧时,交点为入点, 若该端点为所述红色线段上的第二个端点,且在所述非重叠的蓝色线段的 外侧时,交点为出点;若红色线段上非交点的端点为所述红色线段上的第一 个端点,且在所述非重叠的蓝色线段的内侧,交点为出点,若红色线段上非 交点的端点为所述红色线段上的第 一个端点,且在所述非重叠的蓝色线段的 外侧,则交点为入点。
11、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在Red2_bluel中,当两条红色线段在蓝色线段的同侧时,红色线段与蓝色 线段相交的点不属于交点。
12、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在Red2_bluel中,当两条红色线段在蓝色线段的异侧时,红色线段与蓝色 线段相交的点属于交点;蓝色线段以及在蓝色线段对应多边形内部的红色 线段为交点所在的线段。
13、 根据权利要求12所述的面面叠加中的线段处理方法,其特征在于, 判断所述交点为出点还是入点时,根据交点所在线段的情况直接进行判 断;若线段所在多边形方向上的第二条红色线段为交点所在的线段,则交 点为入点,若线段所在多边形方向上的第 一条红色线段为交点所在的线 段,则交点为出点。
14、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在Red2_bluel中,当蓝色线段与一条红色线段间存在重叠时,判断蓝色线 段与所述重叠的红色线断间的方向,若所述蓝色线段与所述重叠的红色线 段之间方向相反时,所述红色线段与所述蓝色线段之间相交的点不属于交 点;若所述蓝色线段与所述重叠的红色线段之间方向相同时,所述蓝色线 段与红色线段之间相交的点属于交点,记录与交点相关的信息。
15、 根据权利要求14所述的面面叠加中的线段处理方法,其特征在 于,当所述蓝色线段与红色线段之间相交的点属于交点时,蓝色线段以及 不与所述蓝色线段重叠的红色线段为交点所在的线段。 .
16、 根据权利要求15所述的面面叠加中的线段处理方法,其特征在 于,当所述蓝色线段与所述红色线段之间相交的点属于交点时,根据交点 所在的线段,判断所述交点是出点还是入点;在判断过程中,选择蓝色线段上非交点的端点,若该端点为所述蓝色线段上的第二个端点,且在所述非重叠的红色线段的内侧时,交点为入点, 若该端点为所述蓝色线段上的第二个端点,且在所述非重叠的红色线段的外侧时,交点为出点;若蓝色线段上非交点的端点为所述蓝色线段上的第一个端点,且在所述非重叠的红色线段的内侧,交点为出点,若蓝色线段上非 交点的端点为所述蓝色线段上的第 一个端点,且在所述非重叠的红色线段的 外侧,则交点为入点。
17、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在red2—blue2中,当红色线段组与蓝色线段组之间不存在交叉关系,则红色 线段与蓝色线段相交的点不属于交点。
18、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在red2一blue2中,当红色线段组与蓝色线段组之间存在交叉关系,红色线段 与蓝色线段相交的点属于交点,选取在不同组的线段所生成的多边形内部的 线段作为产生交点的线段。
19、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在red2—blue2中,当 一条红色线段与一条蓝色线段重叠时,对于不重合的蓝 色线段与红色线段,首先判断不重合的线段的端点是否在另一组线段所生成 的多边形的内部,只要有一条不重合的线段的端点在另 一组线段所生成的多 边形的内部,则认为线段相交的点属于交点;若两条不重合的线段的端点都 不在另 一组线段所生成的多边形的内部,则认为线段之间的点不属于交点。
20、 根据权利要求19所述的面面叠加中的线段处理方法,其特征在于, 当线段之间相交的点的交点时,如果不重合的红蓝线段都在对方线段所形 成的多边形内部,则这两条不重合的线段就是交点所属的线段;如果第一组 中的不重合的线段在对方线段所形成的多边形内部,而第二组中不重合的线 段在对方线段所形成的多边形的外部,则第 一组中的不重合线段与第二组中 的重合线段为交点所属的线段。
21、 根据权利要求4所述的面面叠加中的线段处理方法,其特征在于, 在red2—blue2中,当两条红色线段分别与两条蓝色线段重叠时,当所述红色 线段与所述蓝色线段间不是恰好完全重合时,线段之间的点不属于交点;当 所述红色线段与所述蓝色线段恰好完全重合时,记录交点以及用于表示同向 完全重合或异向完全重合的标记信息。
全文摘要
本发明提供一种面面叠加中的线段处理方法,包括输入多边形,所述多边形来源于两个多边形组;拆分所述的多边形,得到多边形上的各条线段;对所得到的各条线段采用扫描线算法处理,得到所有相交的线段;将所得到的所有相交的线段按照相交情况以及线段所属的多边形组进行分类,得到四种类别red1_blue1、red2_blue1、red1_blue2以及red2_blue2;对所有相交的线段按照所划分的类别分别进行处理,得到属于交点的点的坐标、交点所在的线段、交点是出点还是入点的信息、记录交点排序大小的标志信息。本发明在线段处理过程中得到了多种属性,有利于面面叠加中的后续操作;本发明可以对特殊类型的交点进行处理。
文档编号G06F17/00GK101499055SQ200810057419
公开日2009年8月5日 申请日期2008年2月1日 优先权日2008年2月1日
发明者炎 刘, 方金云, 朱效民, 兵 郎 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1