CN102360507A - 一种基于交点排序的多边形裁剪的方法 - Google Patents
一种基于交点排序的多边形裁剪的方法 Download PDFInfo
- Publication number
- CN102360507A CN102360507A CN2011103183975A CN201110318397A CN102360507A CN 102360507 A CN102360507 A CN 102360507A CN 2011103183975 A CN2011103183975 A CN 2011103183975A CN 201110318397 A CN201110318397 A CN 201110318397A CN 102360507 A CN102360507 A CN 102360507A
- Authority
- CN
- China
- Prior art keywords
- polygon
- intersection point
- point
- prime
- little
- 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.)
- Pending
Links
Images
Landscapes
- Image Generation (AREA)
Abstract
本发明公开了一种基于交点排序的多边形裁剪方法。它的步骤如下:1)根据裁剪被裁剪边四个节点的相对位置,判断线段是否相交,对交点的进出性进行分析;2)取裁剪多边形的边依次对实体多边形进行求交,根据每一条裁剪边上交点的顺序、进出性,判断裁剪边的终点是否组成结果多边形,将组成结果多边形的裁剪多边形顶点插入到交点链表,形成一个由进点和出点组成的点对;3)根据交点的进出性,以及所记录的实体多边形的终点序号,设置所有交点的指针指向,并将组成结果多边形的实体多边形顶点插入到交点链表,完成交点的第二次排序;4)遍历结果顶点链表,根据指针指向输出结果多边形。本发明在计算机图形学领域具有重要的实际应用价值。
Description
技术领域
本发明涉及计算机图形学中多边形裁剪的技术领域,尤其涉及一种基于交点排序的多边形裁剪的方法。
背景技术
裁剪是图形学中的基本操作。经典的多边形裁剪算法,如Sutherland-Hodgeman算法、梁-Barsky算法等要求裁剪多边形为矩形,而在实际应用中,裁剪多边形和实体多边形可能均为一般多边形,并包含内环。Weiler算法、Vatti算法以及Greiner-Hormann算法可以在一定的时间内处理一般多边形的裁剪,其中,Weiler算法使用的是树形数据结构,Vatti和Greiner-Hormann算法使用的是双线性链表数据结构,刘永奎等对上述三种算法进行改进后,提出了一种新的多边形裁剪算法(刘氏算法),对原有的数据结构进行了一定的优化,提高了裁剪效率。但是,该算法的交点采用双指针结构,将交点插入到实体多边形和裁剪多边形顶点链表使得参与求交的边的数量因为多边形顶点个数的增加而增加,造成算法的冗余,当多边形交点数目不断增多时,重复的求交计算对算法效率的影响比较明显。
发明内容
本发明的目的是克服现有技术的不足,提供一种基于交点排序的多边形裁剪的方法。
基于交点排序的多边形裁剪的方法的步骤如下:
1)根据裁剪边和被裁剪边四个节点的相对位置,判断两条线段是否相交,并对交点的进出性情况进行分析;
2)取裁剪多边形的边依次对实体多边形的边界进行求交,根据每一条裁剪边上交点的顺序、进出性,判断该裁剪边的终点是否组成结果多边形,将组成结果多边形的裁剪多边形顶点插入到交点链表,形成一个由进点和出点组成的点对;
3)根据交点的进出性,以及所记录的实体多边形的终点序号,设置所有交点的指针指向,并将组成结果多边形的实体多边形顶点插入到交点链表,完成交点的第二次排序;
4)遍历结果多边形顶点链表,根据指针指向输出结果多边形。
所述的步骤1)包括:
(1)将平面上坐标为xC0,yC0的点C0,到坐标为xC1,yC1的C1的线段C0 C1和由坐标为xS0,yS0的点S0到坐标为xS1,yS1的点S1所组成的线段S0 S1的直线方程写成:
其中: 令 则当Δ≠0时,两直线的交点坐标为:
(2)记裁剪多边形的一条边的两个顶点为:C0 C1,线段方向为C0→C1;实体多边形当前被处理的边的顶点为S0和S1,线段方向为S0→S1,由式(1),其所在的直线方程为:
点S0、S1相对于直线C0 C1的位置表示为:
所述的步骤2)包括:
(1)对于实体多边形和裁剪多边形的交点,如果沿着裁剪多边形的边由交点进入实体多边形,这一类交点称为进点,反之,如果沿着裁剪多边形由交点离开实体多边形,则这类交点为出点;
(2)采用单线性链表来表示多边形,链表中的每一个节点按序存储着多边形的一个顶点,多边形顶点和交点的数据结构如下:
Vertex={x,y:Coordinates;Next:Pointer;PartNum:Number};
Intersection={x,y:Coordinates;Next:Pointer;VertexID:Number;Inters:Boolean;Used:Boolean}
Vertex用于存储裁剪多边形和实体多边形的顶点,其中,x,y表示点的坐标,Next用于指向多边形中以当前顶点为始点的边的终点,PartNum记录顶点所在多边形环的序号,Intersection用于存储实体多边形和裁剪多边形的交点,其中x,y用于表示点的坐标,Next用于指向该交点在结果多边形中的下一个顶点,VertexID记录该交点所在实体多边形边的终点在实体多边形链表中的序号,Inters表示交点的进出性,Used用于最后输出结果多边形时标记交点是否已经输出过。
(3)将多边形的求交运算、交点的进出性判断以及将裁减多边形顶点插入到交点链表合成一步同时进行,根据交点的进出性,将每一条裁剪边上的所有交点按照裁剪边的方向排序后插入交点链表,如果最后一个交点为进点,则当前裁剪边的终点位于实体多边形内,若无交点,则与前一顶点的内外关系一致,将该顶点作为进点按序插入到交点链表中。
所述的步骤3)包括:对于每一个进点,直接将其指针指向链表中下一个交点;对于出点,如果存在与该出点具有相同终点信息的进点,且位于出点的前方,则将该出点的指针指向该进点;反之,将出点所在实体多边形边的终点作为出点插入到交点链表,并将出点指针指向该顶点。
本发明与现有技术相比具有的有益效果:
1、将多边形裁剪问题转化为一连串的由裁剪多边形的一条封闭边界对实体多边形的进行裁剪的问题,使得复杂的多边形裁剪可以简化为多边形的每条边对直线段的分别裁剪问题。
2、解决了连续进出点,重交点等特殊交点的问题,无需额外的对特殊点进行判断,保证了算法的正确性,提高了运行效率。
3、从结果多边形的本质出发,采用单链表、单指针的数据结构,将组成结果多边形的裁剪多边形顶点以及实体多边形顶点插入到交点链表,与其他算法将交点插入到裁剪多边形和实体多边形顶点链表相比,简化了交点的数据结构,避免了因多边形顶点数目增加而造成额外的求交计算和特殊点处理。
4、在输出结果多边形时,新方法只需遍历交点链表,按照交点指针输出即可,与以往算法根据交点的进出性交替搜索裁剪多边形和实体多边形链表相比,更加简洁。
附图说明
图1是示例的裁剪多边形和实体多边形;
图2是裁剪示例的第一次交点排序算法的流程图;
图3是裁剪示例的第二次交点排序算法的流程图;
图4是裁剪示例的“进点-出点”交点对;
图5是裁剪示例的结果多边形顶点链表。
具体实施方式
基于交点排序的多边形裁剪的方法的步骤如下:
1)根据裁剪边和被裁剪边四个节点的相对位置,判断两条线段是否相交,并对交点的进出性情况进行分析;
2)取裁剪多边形的边依次对实体多边形的边界进行求交,根据每一条裁剪边上交点的顺序、进出性,判断该裁剪边的终点是否组成结果多边形,将组成结果多边形的裁剪多边形顶点插入到交点链表,形成一个由进点和出点组成的点对;
3)根据交点的进出性,以及所记录的实体多边形的终点序号,设置所有交点的指针指向,并将组成结果多边形的实体多边形顶点插入到交点链表,完成交点的第二次排序;
4)遍历结果多边形顶点链表,根据指针指向输出结果多边形。
所述的步骤1)包括:
(1)将平面上坐标为xC0,yC0的点C0,到坐标为xC1,yC1的C1的线段C0 C1和由坐标为xS0,yS0的点S0到坐标为xS1,yS1的点S1所组成的线段S0 S1的直线方程写成:
其中: 令 则当Δ≠0时,两直线的交点坐标为:
(2)记裁剪多边形的一条边的两个顶点为:C0 C1,线段方向为C0→C1;实体多边形当前被处理的边的顶点为S0和S1,线段方向为S0→S1,由式(1),其所在的直线方程为:
点S0、S1相对于直线C0 C1的位置表示为:
所述的步骤2)包括:
(1)对于实体多边形和裁剪多边形的交点,如果沿着裁剪多边形的边由交点进入实体多边形,这一类交点称为进点,反之,如果沿着裁剪多边形由交点离开实体多边形,则这类交点为出点;
(2)采用单线性链表来表示多边形,链表中的每一个节点按序存储着多边形的一个顶点,多边形顶点和交点的数据结构如下:
Vertex={x,y:Coordinates;Next:Pointer;PartNum:Number};
Intersection={x,y:Coordinates;Next:Pointer;VertexID:Number;Inters:Boolean;Used:Boolean}
Vertex用于存储裁剪多边形和实体多边形的顶点,其中,x,y表示点的坐标,Next用于指向多边形中以当前顶点为始点的边的终点,PartNum记录顶点所在多边形环的序号,Intersection用于存储实体多边形和裁剪多边形的交点,其中x,y用于表示点的坐标,Next用于指向该交点在结果多边形中的下一个顶点,VertexID记录该交点所在实体多边形边的终点在实体多边形链表中的序号,Inters表示交点的进出性,Used用于最后输出结果多边形时标记交点是否已经输出过。
(3)将多边形的求交运算、交点的进出性判断以及将裁减多边形顶点插入到交点链表合成一步同时进行,根据交点的进出性,将每一条裁剪边上的所有交点按照裁剪边的方向排序后插入交点链表,如果最后一个交点为进点,则当前裁剪边的终点位于实体多边形内,若无交点,则与前一顶点的内外关系一致,将该顶点作为进点按序插入到交点链表中。
所述的步骤3)包括:对于每一个进点,直接将其指针指向链表中下一个交点;对于出点,如果存在与该出点具有相同终点信息的进点,且位于出点的前方,则将该出点的指针指向该进点;反之,将出点所在实体多边形边的终点作为出点插入到交点链表,并将出点指针指向该顶点。
实施例:
以图1中示例的多边形裁剪为例
1)取出裁剪多边形和实体多边形的第一条边,根据裁剪边和被裁剪边四个节点的相对位置,判断两条线段是否相交,并对交点的进出性情况进行分析。
2)按照裁剪边的顺序,对交点进行第一次排序,得到顺序为I0I1I2I3I4C2I5的交点链表,其中,I0、I2、I4为进点,其中C2当成特殊进点来处理,I1、I3、I5为出点。按照交点的进出性,形成“进点-出点”或者“进点-裁剪多边形顶点-出点”的点对。
3)根据交点的进出性,以及所记录的实体多边形的终点序号,设置所有交点的指针指向,并将组成结果多边形的实体多边形顶点插入到交点链表,完成交点的第二次排序。出点I1所记录的终点序号对应的终点为s1,由于链表中不存在终点信息为s1的交点,将s1作为出点(其终点信息为s2)插入到交点链表,并将出点I1的指针指向s1;对于出点I5,其终点序号对应的终点为S5,找到终点信息同为S5,且位于I5前方(实体多边形边的方向)的进点I4,将I5的指针指向I4。通过遍历链表中的交点,设定所有交点(包括插入的裁剪多边形顶点和实体多边形顶点)的指针指向。
4)遍历结果多边形顶点链表,如图5所示,根据指针指向输出结果多边形,完成多边形的裁剪,示例中裁剪结果为两个多边形。
Claims (4)
1.一种基于交点排序的多边形裁剪的方法,其特征在于它的步骤如下:
1)根据裁剪边和被裁剪边四个节点的相对位置,判断两条线段是否相交,并对交点的进出性情况进行分析;
2)取裁剪多边形的边依次对实体多边形的边界进行求交,根据每一条裁剪边上交点的顺序、进出性,判断该裁剪边的终点是否组成结果多边形,将组成结果多边形的裁剪多边形顶点插入到交点链表,形成一个由进点和出点组成的点对;
3)根据交点的进出性,以及所记录的实体多边形的终点序号,设置所有交点的指针指向,并将组成结果多边形的实体多边形顶点插入到交点链表,完成交点的第二次排序;
4)遍历结果多边形顶点链表,根据指针指向输出结果多边形。
3.根据权利要求1所述的一种基于交点排序的多边形裁剪的方法,其特征在于所述的步骤2)包括:
(1)对于实体多边形和裁剪多边形的交点,如果沿着裁剪多边形的边由交点进入实体多边形,这一类交点称为进点,反之,如果沿着裁剪多边形由交点离开实体多边形,则这类交点为出点;
(2)采用单线性链表来表示多边形,链表中的每一个节点按序存储着多边形的一个顶点,多边形顶点和交点的数据结构如下:
Vertex={x,y:Coordinates;Next:Pointer;PartNum:Number};
Intersection={x,y:Coordinates;Next:Pointer;VertexID:Number;Inters:Boolean;Used:Boolean}
Vertex用于存储裁剪多边形和实体多边形的顶点,其中,x,y表示点的坐标,Next用于指向多边形中以当前顶点为始点的边的终点,PartNum记录顶点所在多边形环的序号,Intersection用于存储实体多边形和裁剪多边形的交点,其中x,y用于表示点的坐标,Next用于指向该交点在结果多边形中的下一个顶点,VertexID记录该交点所在实体多边形边的终点在实体多边形链表中的序号,Inters表示交点的进出性,Used用于最后输出结果多边形时标记交点是否已经输出过。
(3)将多边形的求交运算、交点的进出性判断以及将裁减多边形顶点插入到交点链表合成一步同时进行,根据交点的进出性,将每一条裁剪边上的所有交点按照裁剪边的方向排序后插入交点链表,如果最后一个交点为进点,则当前裁剪边的终点位于实体多边形内,若无交点,则与前一顶点的内外关系一致,将该顶点作为进点按序插入到交点链表中。
4.根据权利要求1所述的一种基于交点排序的多边形裁剪的方法,其特征在于所述的步骤3)包括:对于每一个进点,直接将其指针指向链表中下一个交点;对于出点,如果存在与该出点具有相同终点信息的进点,且位于出点的前方,则将该出点的指针指向该进点;反之,将出点所在实体多边形边的终点作为出点插入到交点链表,并将出点指针指向该顶点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103183975A CN102360507A (zh) | 2011-10-19 | 2011-10-19 | 一种基于交点排序的多边形裁剪的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103183975A CN102360507A (zh) | 2011-10-19 | 2011-10-19 | 一种基于交点排序的多边形裁剪的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102360507A true CN102360507A (zh) | 2012-02-22 |
Family
ID=45585832
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103183975A Pending CN102360507A (zh) | 2011-10-19 | 2011-10-19 | 一种基于交点排序的多边形裁剪的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102360507A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104036533A (zh) * | 2014-06-09 | 2014-09-10 | 东南大学 | 多边形裁剪中交点为多边形顶点的进出性判别方法 |
CN106125764A (zh) * | 2016-08-03 | 2016-11-16 | 西北工业大学 | 基于a*搜索的无人机路径动态规划方法 |
CN103871022B (zh) * | 2012-12-12 | 2017-02-08 | 高德信息技术有限公司 | 一种图像裁剪方法和装置 |
CN106548501A (zh) * | 2015-09-21 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 一种图像绘制方法及设备 |
CN106982439A (zh) * | 2017-03-28 | 2017-07-25 | 中国地质大学(武汉) | 一种用于多卫星传感器对地观测覆盖区域求差确认方法 |
CN107038731A (zh) * | 2017-04-01 | 2017-08-11 | 东南大学 | 一种解决交点退化问题的复杂多边形裁剪方法 |
CN107886575A (zh) * | 2017-11-14 | 2018-04-06 | 辽宁工程技术大学 | 一种露天矿采场三角形网格裁剪煤层四边形网格的方法 |
CN108269283A (zh) * | 2017-12-26 | 2018-07-10 | 武汉长江通信智联技术有限公司 | 一种判断移动点进出多边形区域的实现方法 |
CN108823942A (zh) * | 2018-06-25 | 2018-11-16 | 拓卡奔马机电科技有限公司 | 一种裁床自适应废料裁断方法 |
CN109727252A (zh) * | 2019-01-29 | 2019-05-07 | 广联达科技股份有限公司 | 一种任意分割线分割多边形的方法 |
WO2022179049A1 (zh) * | 2021-02-23 | 2022-09-01 | 中国石油大学(华东) | 一种二维多边形图元的矩形视窗剪裁绘图方法 |
-
2011
- 2011-10-19 CN CN2011103183975A patent/CN102360507A/zh active Pending
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103871022B (zh) * | 2012-12-12 | 2017-02-08 | 高德信息技术有限公司 | 一种图像裁剪方法和装置 |
CN104036533B (zh) * | 2014-06-09 | 2017-02-15 | 东南大学 | 多边形裁剪中交点为多边形顶点的进出性判别方法 |
CN104036533A (zh) * | 2014-06-09 | 2014-09-10 | 东南大学 | 多边形裁剪中交点为多边形顶点的进出性判别方法 |
CN106548501B (zh) * | 2015-09-21 | 2019-12-24 | 阿里巴巴集团控股有限公司 | 一种图像绘制方法及设备 |
CN106548501A (zh) * | 2015-09-21 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 一种图像绘制方法及设备 |
CN106125764A (zh) * | 2016-08-03 | 2016-11-16 | 西北工业大学 | 基于a*搜索的无人机路径动态规划方法 |
CN106125764B (zh) * | 2016-08-03 | 2018-11-13 | 西北工业大学 | 基于a*搜索的无人机路径动态规划方法 |
CN106982439A (zh) * | 2017-03-28 | 2017-07-25 | 中国地质大学(武汉) | 一种用于多卫星传感器对地观测覆盖区域求差确认方法 |
CN106982439B (zh) * | 2017-03-28 | 2018-03-06 | 中国地质大学(武汉) | 一种用于多卫星传感器对地观测覆盖区域求差确认方法 |
CN107038731A (zh) * | 2017-04-01 | 2017-08-11 | 东南大学 | 一种解决交点退化问题的复杂多边形裁剪方法 |
CN107038731B (zh) * | 2017-04-01 | 2020-04-21 | 东南大学 | 一种解决交点退化问题的复杂多边形裁剪方法 |
CN107886575A (zh) * | 2017-11-14 | 2018-04-06 | 辽宁工程技术大学 | 一种露天矿采场三角形网格裁剪煤层四边形网格的方法 |
CN108269283A (zh) * | 2017-12-26 | 2018-07-10 | 武汉长江通信智联技术有限公司 | 一种判断移动点进出多边形区域的实现方法 |
CN108823942A (zh) * | 2018-06-25 | 2018-11-16 | 拓卡奔马机电科技有限公司 | 一种裁床自适应废料裁断方法 |
CN109727252A (zh) * | 2019-01-29 | 2019-05-07 | 广联达科技股份有限公司 | 一种任意分割线分割多边形的方法 |
CN109727252B (zh) * | 2019-01-29 | 2020-12-04 | 广联达科技股份有限公司 | 一种任意分割线分割多边形的方法 |
WO2022179049A1 (zh) * | 2021-02-23 | 2022-09-01 | 中国石油大学(华东) | 一种二维多边形图元的矩形视窗剪裁绘图方法 |
US11798206B2 (en) | 2021-02-23 | 2023-10-24 | China University Of Petroleum (East China) | Method for clipping two-dimensional (2D) polygon against rectangular view window |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102360507A (zh) | 一种基于交点排序的多边形裁剪的方法 | |
Hanany et al. | Dimer models and toric diagrams | |
Sederberg | Computer aided geometric design | |
Devadoss et al. | Discrete and computational geometry | |
JP4999522B2 (ja) | 解析メッシュ生成装置 | |
CN104331555A (zh) | 一种针对带有边界的非封闭stl模型的切片处理方法 | |
CN111222418A (zh) | 一种车道线的多道路片段的众包数据快速融合优化方法 | |
Besana et al. | Cell decomposition of almost smooth real algebraic surfaces | |
Lehmann et al. | Discontinuities in continuous scatter plots | |
CN107562779B (zh) | 一种二维矢量多边形自相交的空间拓扑处理方法 | |
CN105468375A (zh) | 一种面向面结构光点云数据的对应点搜索结构的构建方法 | |
CN104143214A (zh) | 一种电子地图多边形三角剖分方法与装置 | |
EP2522952B1 (en) | Method and system for generating an error image | |
Kosanović | A geometric approach to the embedding calculus knot invariants | |
Long et al. | Improved image quilting | |
CN105574932A (zh) | 能够反映地层结构的地质三维模型任意剖切方法 | |
CN102110306A (zh) | 用于对凹多边形进行三角化的方法和系统 | |
CN107067449A (zh) | 一种多边形的矩形窗口裁剪系统 | |
Burton et al. | Fixed parameter tractable algorithms in combinatorial topology | |
Du et al. | On the vertex-oriented triangle propagation (VTP) algorithm: Parallelization and approximation | |
Gemsa et al. | Label placement in road maps | |
CN107038731B (zh) | 一种解决交点退化问题的复杂多边形裁剪方法 | |
CN107564103B (zh) | 一种三维平面实体的布尔并运算方法 | |
WO2015173885A1 (ja) | 描画装置及び描画方法及び描画プログラム | |
CN104462764A (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 | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120222 |