CN104090945B - 一种地理空间实体构建方法及*** - Google Patents
一种地理空间实体构建方法及*** Download PDFInfo
- Publication number
- CN104090945B CN104090945B CN201410309906.1A CN201410309906A CN104090945B CN 104090945 B CN104090945 B CN 104090945B CN 201410309906 A CN201410309906 A CN 201410309906A CN 104090945 B CN104090945 B CN 104090945B
- Authority
- CN
- China
- Prior art keywords
- primitive
- chain
- present construction
- limit
- contiguous
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/05—Geographic models
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Remote Sensing (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明提供一种地理空间实体构建方法及***,属于地理空间数据组织与建模的技术领域。该发明的技术方案包括搜索结果基元集合的外轮廓上构造基元、搜索结果基元集合的外轮廓、搜索结果基元集合。本发明的核心是“构造基元束”的排序过程,并在构建过程中通过针对构造基元作标记的方式记录其使用过程。本发明不仅适用于通过1维构造边/链拓扑构建2维多边形,而且适用于通过2维构造平面片拓扑构建3维实体,且两者在逻辑上统一。本发明的技术方案可用于三维地籍产权体的拓扑自动构建,实现简便,结果可靠。
Description
技术领域
本发明涉及地理空间数据组织与建模的技术领域,尤其是涉及一种基于统一逻辑的地理空间实体拓扑自动构建方法及***。
背景技术
在GIS(地理信息科学)领域中,空间实体类型可以分为几何实体类型与拓扑实体类型(Van Oosterom,P.,Stoter,J.,Quak,W.,Zlatanova,S.(2002).The Balance between Geometry andTopology.Proceedings of the10th International Sympoiusm on Spatial Data Handling,16p;Mehta,D.P.,Sahni,S.(2005).Handbook of Structures and Applications[M].A CRC Press Company;Schneider,M.(1997).Spatial Data Types_A Survey.Spatial Data Types for Database Systems,Lecture Notes in Computer Science Volume,Springer Berlin Heidelberg,pp.11-83;郭仁忠.(2001).空间分析[M],高等教育出版社.)。在早期,针对几何实体类型的研究较多些;随着研究的深入,发现几何实体类型的建模与存储方式存在着种种缺陷,于是转向了拓扑实体类型的研究,后者比前者要复杂得多(体现在数据建模上、存储上、可视化等各个方面),但由于较好地保存了拓扑信息,能够保证实体内部、实体与实体之间拓扑关系的正确性。以多边形建模的数据结构设计为例,早期提出的用于建模与存储多边形的几何数据结构包括面条模型(SpaghettiModel)、多边形模型(Polygon Model)、点字典模型(Point Dictionary Model)、链/点字典模型(Chain/Point Dictionary Model)。具体的,在面条模型中,各个多边形的边界以坐标串的方式来记录,坐标串和多边形之间却不必相互对应;在多边形模型中,将多边形的边界点坐标以多边形为单位独立记录下来,这样的数据处理时每个多边形很容易被识别和提取,但两个相邻多边形的公用边还是被重复记录两次,这容易导致两个相邻多边形之间产生“小裂片”;在点字典模型中,记录的是各多边形边界上各点的编码,并以数据字典方式记录下各点的坐标值,通过字典可实现点编码与坐标值之间的转换,从而避免了“小裂片”,但公共边界上点仍然记录了两次;在链/点字典模型中,每个多边形记录下构成它的链,每条链再记录下构成它的点,每个点再记录下其坐标值,这样对多边形的检索分为三步。以上四种模型本质上都是几何数据结构,都将各个多边形作为独立实体来看待,不能识别出多边形之间的相邻关系,不利于地理数据的分析。之后,提出了“双重独立地图编码”(DIME,Dual Independent MapEncoding)结构和“多边形转换器”(POLYVRT,Polygon Convertor)结构,它们分别将多边形与多边形之间的公共边与公共边集合作为基本存储单位,虽然建模时要相对复杂,但保证了多边形与多边形之间拓扑关系的正确性,DIME与POLYVRT都是典型的拓扑数据结构(在下文中会有具体阐述)。
在以上背景之下,本发明阐述了一种地理空间实体的构建方法。更为具体的,它是一种基于统一逻辑的地理空间实体拓扑自动构建方法。以下为本发明的更为细致的研究现状分析:
针对二维多边形拓扑自动构建算法,国内外存在许多研究。其主要可以分为两大类,包括基于栅格的构建算法和基于矢量的构建算法。
在国内,基于栅格的拓扑自动构建多边形的方法包括:
(1)借鉴经典的基于栅格的种子点填充算法和矢量数据求交的栅格探测法从而建立图幅多边形与弧段所属关系的栅格算法等(王杰臣.(2002).多边形拓扑关系构建的栅格算法[J].测绘学报,31(3):249-254;徐庆荣.(1989).用栅格填充法建立多边形文件[J].武汉测绘科技大学学报,14(4):42-46.)
(2)Zalik等人提出的建立在“统一平面划分(UPS,Uniform Plane Subdivision)”基础上的线段集合拓扑自动构建多边形的方法(“统一平面划分”是二维平面沿着X轴与Y轴细致划分实现的,类似于栅格方法)(Zalik,B.(1999).A Topology Construction from Line Drawings using a UniformPlane Subdivision Technique.Computer-Aided Design,vol.31,no.5,pp.335-348;Krivograd,S.,Zalik,B.(2000).Constructing the Topology from a Set of Line Segments.Proceedings of SpringConference on Computer Graphics,pp.231-240.)
在国内,基于矢量的拓扑自动构建多边形的方法包括:
(1)陈春,杜清运等人提出的“左转(右转)算法”(陈春,张树文,徐桂芬.(1996).GIS中多边形图拓扑信息生成的数学基础[J].测绘学报,25(4):266-271;杜清运.(1989).地图数据库中多边形数据的自动组织[J].测绘学报,18(3):204-212;严静,周立新,***.(1999).一个基于图的多边形拓扑关系生成算法[J].计算机应用,19(10):21-23;Shmutter,B.,Doytsher,Y.(1990).Assembling Closed Polygons.Survey Review,vol.30,no.235,pp.209-220.),
(2)齐华等人提出的“Qi算法”(齐华,刘文熙.(1996).建立结点上弧-弧拓扑关系的Qi算法[J].测绘学报,25(3):233-235;齐华.(1997).自动建立多边形拓扑关系算法步骤的优化与改进[J].测绘学报,26(3):254-260;齐华,李德仁.(2005).基于Qi(xi,yi)函数的辐射线空间分割与TIN的约束边镶嵌[J].武汉大学学报(信息科学版),30(3):204-208;齐华,李德仁,朱庆.(2003).确定射线空间相邻关系的两个非角度算法的时间复杂度分析[J].武汉大学学报(信息科学版),28(5):611-614),
(3)闫浩文等提出的“方位角法”(闫浩文,杨维芳,陈全功,梁天刚.(2000).基于方位角计算的拓扑多边形自动构建快速算法[J].中国图象图形学报,5A(7):563-567;闫浩文,祝方雄.(2001).拓扑多边形自动构建的一种快速算法[J].浙江测绘,(2):2-5;闫浩文,王明孝,王中辉.(2012).计算几何:空间数据处理算法[M],科学出版社.),
(4)刘刚等提出的“类方位角法”(刘刚,李永树.(2011).构建结点上弧-弧拓扑关系的类方位角算法[J].测绘科学,36(6):49-51.),
(5)高云琼等人提出的“矢量外积法”(高云琼,徐建刚,唐文武.(2002).同一结点上弧-弧拓扑关系生成的新算法[J].计算机应用研究,19(4):58-59.)
基于栅格的方法其实属于图形图像学领域,而基于矢量的方法才是本文的研究重点(事实上相关研究也更多),包括本文提出的方法也是基于矢量的,因此左转(右转)算法、Qi算法、方位角算法、类方位角算法、矢量外积法对于本文所提方法具有较大借鉴意义,故而它们是重点研究。
值得注意的是,在国外,针对二维空间中拓扑自动构建多边形的方法简称为多边形化(Polygonization)。在国外,多边形化(Polygonization)很早就开始研究,最早可追溯至Auto-Carto会议中就开始讨论。至今为止,针对各种数据结构都提出了相应的多边形化(Polygonization)算法,更为具体的,包括针对:
(1)由美国人口调查局1967年提出的、以边作为基本单元的“双重独立地图编码(DIME,DualIndependent Map Encoding)”数据结构(Hodgson,M.E.(1985).Constructing Shaded Maps with theDIME Topological Structure:An Alternative to the Polygon Approach.Proceedings of Auto-Carto,vol.7,pp.275-282;Peuquet,D.J.(1984).A Conceptual Framework and Comparison of Spatial DataModels.Cartographica:The International Journal of Geographic Information andGeovisualization,vol.21,no.4,pp.66-113),
(2)之后1976年提出的、以链(即边的集合)作为基本单元的“多边形转换器(POLYVRT,PolygonConvertor)”数据结构(Peucker,T.K.,Chrisman,N.(1975).Cartographic Data Structures.TheAmerican Cartography,vol.2,no.1,pp.55-69;Hodgson,M.E.,Barrett,A.L.,Plews,R.W.(1989).Cartographic Data Capture using CAD.Auto-Carto:Proceedings of the International Conferenceon Computer-Assisted Cartography.American Congress on Surveying and Mapping,vol.9,pp.357-366.),
(3)再之后于1986年提出的、取代了DIME的“拓扑一致的地理编码与参考”(TIGER,Topologically Integrated Geographic Encoding and Referencing)数据结构(Boudriault,G.(1987).Topology in the TIGER File.Proceedings of Auto-Carto,vol.8,pp.258-269;McDowell,T.,Meixler,D.,Rosenson,P.,Davis,B.(1987).Maintenance of Geographic Structure Files at the Bureau of theCensus.Proceedings of Auto-Carto,vol.8,pp.264-269.),
(4)同样类似的、以线性实体作为基本空间单元的TIGRIS数据结构(Bennis,K.,David,B.,Morize-Quilio,I.,Thevenin,J.M.,Viemont,Y.(1991).GeoGraph:A Topological Storage Model forExtensible GIS.ASPRS American Society for Photogrammetry and Auto-Carto Conference,vol.6,pp.349-367;Herring,J.(1987).TIGRIS:Topologically Integrated Geographic Information Systems,Proceedings of Auto-Carto,vol.8,pp.282-291.)
以上数据结构都提出了相应的多边形化(Polygonization)算法。值得注意的是,这些算法事实上都是以上中文文献中提及的“左转(右转)算法”的不同描述,相关的文献详见(Visvalingam,M.,Wade,P.,Kirby,G.H.(1986).Extraction of Area Topology from Line Geometry.Proceedings of Auto Carto London,vol.1,pp.156-165;Meixler,D.,Saalfeld,A.(1987).Polygonization and Topological Editing at the Bureau of the Census.Proceedings of Auto-Carto8,pp.249-257.)。
如上所述,因此重点比较左转(右转)算法、Qi算法、方位角算法、类方位角算法、矢量外积法这五类算法。这五个算法的相同点都是封闭相关的1维边实体从而构造2维多边形实体,核心是基于共享节点的边束排序(这里的边束可以理解为从共享节点出发的辐射状边集合)。在左转(右转)算法中,以左转为例,核心思想是从每条边的起始(终止)节点出发,顺着该边一直左转,直至封闭左多边形,左转时判断的依据是最小夹角大小;在Qi算法中,核心针对同一节点上弧-弧拓扑关系的建立提出一种新方法,即将arctan置换为Qi函数值;在方法角法中,同样是针对建立弧-弧拓扑关系提出新方法,其借鉴了测绘中的方位角的计算思想;在类方位角法中,将arctan置换为K值从而改进弧-弧拓扑关系的建立,K值不等于真实的方位角,但同样能够描述弧段走向,故而该方法称类方位角法;在矢量外积法中,针对建立同一节点上弧-弧关系时,首先采用矢量外积逐次排序任意两个弧段,然后构建相应的二叉排序树,最终排序结果可以通过中序遍历该树获得。
可见,这五个算法的不同点在于由每条边的固定位置(比率尺度数据)推导出边与边之间的排序(定序尺度数据)时采用的具体方法有所区别。更为具体的,在左转(右转)算法中,采用的是直接计算夹角大小,需要执行的操作包括3次判断、2次加法与减法、1次除法、1次abs、1次arctan;在方位角法中,采用的是计算方位角大小,需要执行的操作同样包括3次判断、2次加法与减法、1次除法、1次abs、1次arctan;在Qi算法中,采用的是计算Qi函数值,需要执行的操作包括3次判断、2次加法与减法、1次除法、0次abs、0次arctan;在类方法角法中,需要执行的操作包括2次判断、2次加法与减法、1次除法、0次abs、0次arctan;在矢量外积法中,需要执行的操作包括二叉树的建立和中序遍历。可见,这5个算法都是寻找单个多边形时针对单个多边形内边与边之间排序过程的改进,这5个算法针对搜索多边形集合采用的方法与策略都是一样的。
以上即为多边形化(Polygonization)的国内外研究现状。
存在多边形化(Polygonization)这一概念,相应的,就应该存在多面体化(Polyhedron)这一概念,也即应该存在于三维空间中拓扑自动构建三维实体的方法。由上可见,多边形化(Polygonization)的研究已经相对成熟。但是,多面体化(Polyhedron)的研究就相对缺乏得多,无论是国内研究还是国外研究。据笔者目前的认知与相关文献索引,在GIS相关领域至今尚未存在严格意义上的多面体化(Polyhedron)的研究。尽管如此,与之密切相关的基于拔高(extrude)生成三维实体的研究存在不少,包括:
(1)最为典型的是Ledoux等提出了通过拔高(extrusion)方式由二维平面图生成“三维规则建筑体”的方法(Ledoux,H.,Meijers,M.(2011).Topologically Consistent3D City Models Obtained byExtrusion.International Journal of Geographical Information Science,vo.25,no.4,pp.557-574;Ledoux,H.,Meijers,M.(2009).Extruding Footprints to Create Topologically Consistent3D CityModels.Urban and Regional Data Management,UDMS Annual,pp.39-48.),
(2)Geotz和Zif等提出通过拔高方式基于平面地图OpenStreetMap生成CityGML(用于表达三维城市模板的通用数据模型)中LOD1(第1类细节层次)建筑体的方法(Over,M.,Schilling,A.,Neubauer,S.,Zipf,A.(2010).Generating Web-based3D City Models from OpenStreetMap:TheCurrent Situation in Germany.Computers,Environment and Urban Systems,vol.34,no.6,pp.496-507;Goetz,M.,Zipf,A.(2012).Towards Defining a Framework for the AutomaticDerivation of3D CityGML Models from Volunteered Geographic Information.InternationalJournal of3-D Information Modelling(IJ3DIM),vol.1,no.2,pp.1-16;Goetz,M.(2013).TowardsGenerating Highly Detailed3D CityGML Models from OpenStreetMap.International Journal ofGeographical Information Science,vol.27,no.5,pp.845-865.),
(2)Verbree和Germs等提出基于二维平面视图(2D Plan View)和高程信息(Height)生成三维模型视图(3D Model View)的方法,而三维世界视图(3D World View)仅仅是在三维模型视图(3DModel View)上粘贴影像等纹理信息,增强了真实感(Germs,R.,van Maren,G.,Verbree,E.,Jansen,F.W.(1999).A Multi-view VR Interface for3D GIS.Computers&Graphics,vol.23,no.4,pp.497-506;Verbree,E.,Maren,G.V.,Germs,R.,Jansen,F.,Kraak,M.J.(1999).Interaction inVirtual World Views_Linking3D GIS with VR.International Journal of Geographical InformationScience,vol.13,no.4,pp.385-396.),
(3)朱庆和胡明远等提出了“房屋产权体集群”的表达模型(Zhu,Q.,Hu,M.Y.(2010).Semantics-based3D Dynamic Hierarchical House Property Model.International Journal ofGeographical Information Science,vol.24,no.2,pp.165-188;朱庆,胡明远,黄丽慧.(2009).基于多层次事件的三维房产动态表示[J].武汉大学学报(信息科学版),34(3):326-330.),
(4)Horna等通过二维建筑平面结构图(2D Architectural Plan)通过拔高生成三维室内场景的方法,室内场景中的内墙只能垂直于底面(Horna,S.,Damiand,G.,Meneveaux,D.,Bertrand,Y.(2007).Building3D Indoor Scenes Topology from2D Architectural Plans.GRAPP(GM/R),pp.37-44;Horna,S.,Meneveaux,D.,Damiand,G.,Bertrand,Y.(2009).Consistency Constraints and3D Building Reconstruction.Computer-aided Design,vol.41,no.1,pp.13-27.),
总结而言,无论是CityGML中的LOD1建筑物,还是房屋产权体、三维规则建筑物,或是三维模型视图(3D Model View)中的建筑模型,其实从几何角度来看待都是同一类三维实体,即顶面与底面平行、侧面垂直于底面的盒状规则三维实体。只能生成这样的“盒状”三维实体是拔高(extrude)方法的最大局限性。严格地来说,这种基于拔高(extrude)方法生成三维实体的方法并不能算作严格意义上的多面体化(Polyhedron)方法。举个最简单的例子,针对一个由多个离散小面片拟合而成的三维圆球如何实现拓扑自动构建,拔高算法就不再适用。
对此,郭仁忠等提出了一种基于离散平面片集合拓扑构建三维地籍产权体的方法,该方法适用于不规则形状的三维产权体的拓扑自动构建(张玲玲,史云飞,郭仁忠,李霖.(2010).三维地籍产权体的定义与表达[J].地球信息科学学报,12(2):207-213)。针对该方法,郭仁忠通过一系列文献给予了该方法的详细阐述,包括:
(1)阐述基于共享直线段的平面束排序等核心原理(郭仁忠,应申,李霖.(2012).基于面片集合的三维地籍产权体的拓扑自动构建[J].测绘学报,41(4):620-626;李霖,赵志刚,郭仁忠,贺彪.(2012).空间体对象间三维拓扑构建研究[J].武汉大学学报(信息科学版),37(6):719-723;郭仁忠,应申.(2010).三维地籍形态分析与数据表达[J].中国土地科学,24(12):45-51;贺彪,李霖,郭仁忠,史云飞.(2011).顾及外拓扑的异构建筑三维拓扑重建[J].武汉大学学报(信息科学版),36(5):579-583;Yu,C.B.,Ying,S.,He,B.,Zhao,Z.G.(2012).An Automatic Sorting Approachof Surface Bundle based on the Shared Space Curve.20th International Conference onGeoinformatics(GEOINFORMATICS2012),June,Hongkong,6p;Ying,S.,Guo,R.Z.,Li,L.(2011).Design and Development of a3D Cadastral System Prototype based on the LADM and3DTopology.2nd International Workshop on 3D Cadastres,16-18November2011,Delft,theNetherlands,pp.167-188;Guo,R.Z.,Yu,C.B.,He,B.,Zhao,Z.G.,Li,L.,Ying,S.(2012).LogicalDesign and Implementation of the Data Model for 3D Cadastre in China.3rd InternationalWorkshop on 3D Cadastres:Developments and Practices,25-26October2012,Shenzhen,China,pp.113-136.)。
(2)同时基于该方法实现了中国广东省深圳市诸多三维宗地(包括深圳市会展中心建筑体、深圳市华润万象城大楼、深圳市供电局大厦、深港西部通道等)的拓扑自动构建的实践工作(Guo,R.Z.,Li,L.,Ying,S.,Luo,P.,He,B.,Jiang,R.R.(2013).Developing a 3D Cadastre for theAdministration of Urban Land Use:A Case Study of Shenzhen,China.Computers,Environmentand Urban Systems,vol.40,pp.46-55;Guo,R.Z.,Li,L.,He,B.,Luo,P.,Ying,S.,Zhao,Z.G.,Jiang,R.R.(2011).3D Cadastre in China_a Case Study in Shenzhen City.2nd International Workshop on3D Cadastres,16-18November2011,Delft,the Netherlands,pp.291-310;Ying,S.,Guo,R.Z.,Li,L.,He,B.(2012).Application of3D GIS to3D Cadastre in Urban Environment.3rd InternationalWorkshop on3D Cadastres:Developments and Practices,25-26October,2012,Shenzhen,China,pp.253-272.)。
由上可见,这种基于离散面片拓扑构建三维产权体的方法,适用于不规则的三维实体(典型的如三维宗地、三维建筑体等)。针对迄今为止极其稀缺的三维实体拓扑自动构建,该方法是一种适用的有效方法。但是,该方法存在缺陷,具体而言,该方法只是针对在三维空间中,高一维度的空间实体(即体)如何由紧邻的低一维的基元(即平面片)拓扑自动构建而成,没有将二维空间中高一维度的空间实体(即面)如何由紧邻的低一维度的基元(即边或链)拓扑自动构建这样的情况也纳入考虑,更没有将三维空间中构体与二维空间中构面给予详细的对比分析。也即以上提出的基于离散面片拓扑构建三维产权体方法的适用范围窄。
总结而言,针对二维空间中二维多边形的拓扑自动构建方法(即多边形化)的研究已经相对成熟,针对严格意义上的三维实体拓扑自动构建的方法(即多面体化)的研究极其缺少,更几乎不存在(根据笔者的见识与相关文献搜索)将多面体化方法与多边形化方法给予对比的研究,包括比较多面体化与多边形化在原理上存在哪些相同点、哪些不同点,两者的核心思想是否类似等。客观上,由于多面体化(Polyhedron)要比多边形化(Polygonization)在技术原理上要复杂与困难许多才导致严格意义上的多面体化(Polyhedron)的研究如此稀缺,那么就应该明确指出两者的异同在哪里,前后相对于后者的难点与复杂性具体体现在哪里;两者的核心思想是否一致,如果一致,是否可以在逻辑上统一抽象与归纳。这些都是现有相关文献与研究中缺少的。
发明内容
本发明针对现有技术缺陷,在继承研究基于离散面片拓扑构建三维产权体的方法的基础之上给予了进一步的深入研究,从而提出了基于统一逻辑的空间实体构建方法。
本发明提供一种地理空间实体构建方法,将要构建的空间实体结果,称为结果基元;用于构造结果基元的初始给定基元,称为构造基元;设构造基元的维度为n,则由所有相关构造基元共同相接的、比构造基元仅仅低一个维度的基元,称为低维公共基元;以低维公共基元为中心,相接于该中心的所有构造基元形成的辐射状结构,称为构造基元束;执行以下步骤,
步骤1,搜索结果基元集合的外轮廓上的任意一个构造基元,包括以下子步骤,
步骤1.1,计算构造基元集合的最小外包络,获取最小外包络的极值;
步骤1.2,计算相接于以上极值的所有构造基元,从中选取位于最外侧的构造基元;
步骤1.3,对于以上位于最外侧的构造基元赋予方向,所述方向为1或2;
步骤2,搜索结果基元集合的外轮廓,包括以下子步骤,
步骤2.1,创建空的当前构造基元集合,然后初始化为包含步骤1所得结果基元集合的外轮廓上的任意一个构造基元;
步骤2.2,针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向1,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方向2,则标记构造基元的另一侧标记“已使用”;
步骤2.3,从当前构造基元集合中的每个当前构造基元出发,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
步骤2.4,清空当前构造基元集合,将步骤2.3搜索得到的所有的最邻近构造基元存储下来,并作为新的当前构造基元集合,返回步骤2.2迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为结果基元集合的外轮廓;
步骤3,搜索结果基元集合,包括以下子步骤,
步骤3.1,创建一个空的当前构造基元集合,然后初始化为包含一个起始构造基元。
步骤3.2,针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向2,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方向1,则标记构造基元的另一侧标记“已使用”;
步骤3.3,针对当前构造基元集合中每个当前构造基元,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元,此处的定位方式与步骤2.3中的定位方式相反;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
步骤3.4,清空当前构造基元集合,将步骤3.3搜索得到的所有最邻近构造基元存储下来,并作为新的当前构造基元集合,返回步骤3.2迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为一个结果基元;
步骤3.5,返回步骤3.1,重新创建并初始化当前构造基元集合进行以上处理,直至所有的构造基元的两侧各被使用一次,此时所有的结果基元都搜索完毕。
而且,设构造基元分为如下三类,,
0-usedP,表示构造基元的一侧和另一侧都未被使用过;
1-usedP,表示即构造基元的一侧或另一侧已被使用过;
2-usedP,表示即构造基元的一侧和另一侧都已被使用过;
每次进入步骤3.1时,用于初始化空的当前构造基元集合所采用的起始构造基元记为beginP,beginP是0-usedP或1-usedP,beginP的方向如下设置,
如果beginP是0-usedP,则其方向是1或2;
如果beginP是1-usedP,并且beginP位于结果基元集合的外轮廓上,则选择beginP曾经用过的方向;如果beginP是1-usedP,并且beginP不位于结果基元集合的外轮廓上,则选择beginP未曾用过的方向。
而且,所述结果基元为2维,相应构造单元为1维;或者,所述结果基元为3维,相应构造单元为2维。
而且,构造单元为1维的边时,设边的方向包括左向和右向,左向标记为方向1,右向标记为方向2;构造单元为1维的链时,设链的方向包括左向和右向,左向标记为方向1,右向标记为方向2,链的方向由包含在该链中的边的方向、链的节点与边的节点之间的步长决定如下,
计算链的起始节点至边的起始节点的步长,记为sz1;计算链的起始节点至边的终止节点的步长,记为sz2;比较sz1与sz2,如果sz1大于sz2,则链和边方向相反;如果sz1小于sz2,则链和边方向相同。
而且,构造单元为1维的边/链时,
步骤2.3中,从当前构造基元集合中的每个当前构造基元出发,通过寻找极值夹角,定位到最邻近的构造基元,实现方式如下,
(i)若当前边/链的方向为1,且选择的是当前边/链的起始节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最大的那条边/链,该边/链是最邻近边/链;
(ii)若当前边/链的方向为1,且选择的是当前边/链的终止节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最小的那条边/链,该边/链是最邻近边/链;
(iii)若当前边/链的方向为2,且选择的是当前边/链的起始节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最小的那条边/链,该边/链是最邻近边/链;
(iv)若当前边/链的方向为2,且选择的是当前边/链的终止节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最大的那条边/链,该边/链是最邻近边/链;
步骤3.3中,从当前构造基元集合中的每个当前构造基元出发,通过寻找极值夹角,定位到最邻近的构造基元,实现方式如下,
(i)若当前边/链的方向为1,且选择的是当前边/链的起始节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最小的那条边/链,该边/链是最邻近边/链;
(ii)若当前边/链的方向为1,且选择的是当前边/链的终止节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最大的那条边/链,该边/链是最邻近边/链;
(iii)若当前边/链的方向为2,且选择的是当前边/链的起始节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最大的那条边/链,该边/链是最邻近边/链;
(iv)若当前边/链的方向为2,且选择的是当前边/链的终止节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最小的那条边/链,该边/链是最邻近边/链。
而且,构造单元为2维的平面片时,设平面片的方向包括前向和后向,后向标记为方向1,前向标记为方向2。
而且,构造单元为2维的平面片时,
步骤2.3中,从当前构造基元集合中的每个当前构造基元出发,通过寻找极值夹角,定位到最邻近的构造基元,实现方式如下,
(i)若当前平面片的方向为1,则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最小的那个平面片,该平面片是最邻***面片;
(ii)若当前平面片的方向为2,则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最大的那个平面片,该平面片是最邻***面片;
步骤3.3中,从当前构造基元集合中的每个当前构造基元出发,通过寻找极值夹角,定位到最邻近的构造基元,实现方式如下,
(i)若当前平面片的方向为1,则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最大的那个平面片,该平面片是最邻***面片;
(ii)若当前平面片的方向为2,则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最小的那个平面片,该平面片是最邻***面片。
本发明还相应提供一种地理空间实体构建***,将要构建的空间实体结果,称为结果基元;用于构造结果基元的初始给定基元,称为构造基元;设构造基元的维度为n,则由所有相关构造基元共同相接的、比构造基元仅仅低一个维度的基元,称为低维公共基元;以低维公共基元为中心,相接于该中心的所有构造基元形成的辐射状结构,称为构造基元束;包括以下模块,
外轮廓构造基元搜索模块,用于搜索结果基元集合的外轮廓上的任意一个构造基元,包括以下子模块,
最小外包络极值获取子模块,用于计算构造基元集合的最小外包络,获取最小外包络的极值;最外侧构造基元选取子模块,用于计算相接于以上极值的所有构造基元,从中选取位于最外侧的构造基元;
最外侧构造基元方向赋予子模块,用于对于以上位于最外侧的构造基元赋予方向,所述方向为1或2;
结果基元集合外轮廓搜索模块,用于搜索结果基元集合的外轮廓,包括以下子模块,
第一当前构造基元集合创建子模块,用于创建空的当前构造基元集合,然后初始化为包含模块1所得结果基元集合的外轮廓上的任意一个构造基元;
第一标记子模块,用于针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向1,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方向2,则标记构造基元的另一侧标记“已使用”;
第一最邻近构造基元定位子模块,用于从当前构造基元集合中的每个当前构造基元出发,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
第一当前构造基元集合更新子模块,用于清空当前构造基元集合,将第一最邻近构造基元定位子模块搜索得到的所有的最邻近构造基元存储下来,并作为新的当前构造基元集合,命令第一标记子模块再次进行标记,迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为结果基元集合的外轮廓;
结果基元集合搜索模块,用于搜索结果基元集合,包括以下子模块,
第二当前构造基元集合创建子模块,用于创建一个空的当前构造基元集合,然后初始化为包含一个起始构造基元;
第二标记子模块,用于针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向2,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方向1,则标记构造基元的另一侧标记“已使用”;
第二最邻近构造基元定位子模块,用于针对当前构造基元集合中每个当前构造基元,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元,此处的定位方式与第一最邻近构造基元定位子模块中的定位方式相反;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
第二当前构造基元集合更新子模块,用于清空当前构造基元集合,将第二最邻近构造基元定位子模块搜索得到的所有最邻近构造基元存储下来,并作为新的当前构造基元集合,命令第二标记子模块再次进行标记,迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为一个结果基元;
结果基元搜索判断子模块,用于命令第二当前构造基元集合创建子模块重新创建并初始化当前构造基元集合进行以上处理,直至所有的构造基元的两侧各被使用一次,此时所有的结果基元都搜索完毕。
本发明方法包括搜索结果基元集合的外轮廓上构造基元、搜索结果基元集合的外轮廓、搜索结果基元集合三个大步骤。本发明的核心是“构造基元束”的排序过程,并在构建过程中通过针对构造基元作标记的方式记录其使用过程。本发明不仅适用于通过1维构造边/链拓扑构建2维多边形,而且适用于通过2维构造平面片拓扑构建3维实体,且两者在逻辑上统一。本发明的技术方案可用于三维地籍产权体的拓扑自动构建,实现简便,结果可靠。
附图说明
附图1为采用2D ACSEBUL中搜索结果多边形集合的外轮廓的过程示意图;
附图2为采用2D ACSEBUL中搜索结果多边形集合的过程示意图;
附图3为采用2D ACSEBUL中确定链的方向的过程示意图,其中图3a为链的方向(dir)与边的方向(dir)相反的示意图,图3b为链的方向(dir)与边的方向(dir)相同的示意图;
附图4为采用3D ACSEBUL中搜索结果体集合的外轮廓的过程示意图;
附图5为采用3D ACSEBUL中搜索结果体集合的过程示意图。
具体实施方式
以下结合附图和实施例详细说明本发明技术方案。
ACSEBUL的概念
本发明提供一种基于统一逻辑的空间实体构造方法,该方法简写为ACSEBUL(AnApproach to the Construction of Spatial Entities Based on Unified Logic)。该方法是针对初始给定的构造空间实体集合,通过记录每个构造空间实体是如何具体使用的,从而最终生成结果空间实体集合的方法,该方法适用于二维空间中构面,也适用于三维空间中构体,且构面与构体在逻辑上是统一的。该方法应用于2维情况时,即通过1维边/链拓扑自动构建2维多边形时,简称2D ACSEBUL;该方法应用于3维情况时,即通过2维平面片拓扑自动构建3维体时,简称3D ACSEBUL。ACSEBUL为空间实体的拓扑自动构建提供了一种新方法。
在ACSEBUL中,最终想要构造的空间实体结果,称为结果基元。2D ACSEBUL中的2维多边形、3D ACSEBUL中的3维体,都被称为结果基元。
在ACSEBUL中,用于构造结果基元的初始给定基元称为构造基元。2D ACSEBUL中的1维边/链,3D ACSEBUL中的2维平面片,都被称为构造基元。
在ACSEBUL中,设构造基元的维度为n,则由所有相关构造基元共同相接的、比构造基元仅仅低一个维度(即(n-1)维)的基元,称为低维公共基元。低维公共基元不直接参与构造结果基元,但它作为“构造基元束”排序的核心内容间接参与构造结果基元。2D ACSEBUL中的0维公共节点,3D ACSEBUL中的1维公共边,都被称为低维公共基元。
在ACSEBUL中,以低维公共基元为中心,相接于该中心的所有构造基元形成的辐射状结构,称为构造基元束。2D ACSEBUL中相接于0维公共节点的1维边束(或1维链束),3DACSEBUL中相接于1维公共边的2维平面片束,都被称为构造基元束。对应的,如上所述,2D ACSEBUL中的0维公共节点、3D ACSEBUL中的1维公共边,都被称为低维公共基元。ACSEBUL的原理阐述
在ACSEBUL中,核心是“构造基元束”的排序。在“构造基元束”排序的过程中,关键是寻找从构造基元一侧出发的最邻近构造基元。之所以这样做,是因为:每个结果基元都是由相关构造基元组成,针对某个结果基元而言在从已知构造基元出发寻找未知的相关构造基元的过程中,面对以低维公共基元为中心、相接于该中心的所有构造基元形成的、呈现辐射状的“构造基元束”中,未知的相关构造基元与已知的构造基元的沟通桥梁是两者之间的夹角,总是寻找极值夹角(即最小/最大夹角),极值夹角保证了找到的是最邻近构造基元,即保证了搜索结果的“相关性”。(更为直观地,在2D ACSEBUL中,该夹角为以节点为公共中心、边与边(或链与链)之间的平面夹角;在3D ACSEBUL中,该夹角为以公共边为中心、平面片与平面片之间的二面夹角;它们在逻辑上统一)。
同时,已知构造基元与最邻近构造基元之间存在是否相容的问题:若低维公共基元在以上两者中扮演的角色相反,则两者相容(更为直观的,在2D ACSEBUL中,若0维公共节点是已知1维边/链的起点(终点),同时是最邻近1维边/链的终点(起点),则该两条1维边/链相容;在3D ACSEBUL中,若已知2维平面片中环绕方向在1维公共边处为向下(向上),同时最邻近2维平面片中环绕方向在1维公共边处为向上(向下),则该两个2维平面片相容;它们在逻辑上统一);若低维公共基元在以上两者中扮演的角色相同,则两者不相容(具体情况略)。
在ACSEBUL中,每个构造基元都有两个方向(dir),分别代表构造基元的两侧。两个方向赋值时能够相互区别即可,实施例赋值为1和2。之所以有两个方向,是因为最终生成结束时,每个构造基元会且只会被使用2次,即每个构造基元位于两侧的结果基元都已生成完毕(更为直观的,在2D ACSEBUL中,每条边/链在拓扑构建其左多边形和右多边形的过程中分别被使用1次;在3D ACSEBUL中,每个平面片在拓扑构建其前向体和后向体的过程中分别被使用1次;它们在逻辑上统一)。
在结果基元的生成过程中,当构造基元被赋予方向时,都会对构造基元的一侧“作标记”。之所以需要“作标记”,是因为生成完毕时每个构造基元会且只会被使用2次,及时标记能够记录构造基元的使用情况,避免重复使用构造基元、重复生成结果基元。“标准的作标记”方法为:若构造基元被赋予方向1,则标记构造基元的一侧“已使用”;若构造基元被赋予方向2,则标记构造基元的另一侧“已使用”(更为直观的,在2D ACSEBUL中,若被赋予方向1(2),则标记构造边/链的左侧(右侧)“已使用”;在3D ACSEBUL中,若被赋予方向1(2),则标记构造平面片的背面(正面)“已使用”;它们在逻辑上统一)。
完整的ACSEBUL主流程分为三个大步骤,包括(1)搜索结果基元集合的外轮廓上的任意一个构造基元;(2)搜索结果基元集合的外轮廓;(3)搜索结果基元集合。具体实施时,可采用计算机软件技术实现自动运行流程。
更为具体的,
针对大步骤(1)搜索结果基元集合的外轮廓上的任意一个构造基元,包括以下小步骤:
(1.1)计算构造基元集合的最小外包络,获取最小外包络的极值;
(1.2)计算相接于以上极值的所有构造基元,从中选取位于最外侧的构造基元;
(1.3)对于以上位于最外侧的构造基元赋予方向。
针对大步骤(2)搜索结果基元集合的外轮廓,包括以下小步骤:
(2.1)此时主流程的大步骤(1)结束。创建当前构造基元集合,其内容为空,需要初始化,其初始值为大步骤(1)的返回结果(即构造结果基元集合的外轮廓上的任意一个构造基元及其方向)。
(2.2)针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方法为前述“标准的作标记方法”;
(2.3)从当前构造基元集合中的每个当前构造基元出发,分别执行以下处理,
通过“构造基元束”排序,定位到最邻近的构造基元。具体的,每个结果基元都是由相关构造基元组成,针对某个结果基元而言在从已知构造基元出发寻找未知的相关构造基元的过程中,面对以低维公共基元为中心、由相接于该中心的所有构造基元组成的、呈现辐射状的“构造基元束”中,未知的相关构造基元与已知的构造基元的沟通桥梁是两者之间的夹角,总是寻找极值夹角(最小/最大夹角),极值夹角保证了找到的是最邻近构造基元。
同时,针对以上定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向。具体的,若低维公共基元在以上两者中扮演的角色相反,则两者相容;若低维公共基元在以上两者中扮演的角色相同,则两者不相容。
(2.4)清空当前构造基元集合,将步骤(2.3)搜索得到的所有最邻近构造基元存储下来,并作为新的当前构造基元集合,返回步骤(2.2),如此迭代搜索(即对当前构造基元集合中的每一个当前构造基元,进一步搜索其最邻近构造基元),直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为一个结果基元。
针对大步骤(3)搜索结果基元集合,包括以下小步骤:
(3.1)主流程的大步骤(2)已结束。此时,结果基元集合的外轮廓上每一个构造基元有且只有一侧被标记为“已使用”;
创建一个当前构造基元集合,其内容为空,需要初始化,即采用一个构造基元用于初始化空的当前构造基元集合。
(3.2)针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,所采用的标记方法与(2.1)中标记方法相反,即若构造基元被赋予方向2,则标记构造基元的一侧“已使用”;若构造基元被赋予方向1,则标记构造基元的另一侧“已使用”;
(3.3)针对当前构造基元集合中每个当前构造基元,分别执行以下处理,
通过“构造基元束”排序,定位到最邻近的构造基元,此处的定位方式与步骤(2.3)中的定位方式相反,即在“构造基元束”中,未知的相关构造基元与已知的构造基元的沟通桥梁是两者之间的夹角,总是寻找极值夹角(最大/最小夹角)。换言之,如果步骤(2.3)找最大夹角,此处找最小夹角;如果步骤(2.3)找最小夹角,此处找最大夹角;
同时,针对以上定位到的每个最邻近构造基元,根据它与相应当前构造基元之间的相容性赋予方向,此处的赋予方向方法与步骤(2.3)中的赋予方向方法相同;
(3.4)清空当前构造基元集合,将步骤(3.3)搜索得到的所有最邻近构造基元(并赋予方向)储下来,并作为新的当前构造基元集合,返回步骤(3.2)如此迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为一个结果基元。
(3.5)返回步骤(3.1),采用以上方法,不停地创建、初始化、更新、记录当前构造基元集合,直至所有的构造基元的两侧各被使用一次。此时,所有的结果基元都搜索完毕。
值得注意的是,当每次进入步骤(3.2)时,当前构造基元集合中的每个当前构造基元都会更新。尽管如此,无论如何更新,构造基元总是可以分为如下三类:
(1)0-usedP(即构造基元的一侧和另一侧都未被使用过);
(2)1-usedP(即构造基元的一侧或另一侧已被使用过);
(3)2-usedP(即构造基元的一侧和另一侧都已被使用过);
每次进入步骤(3.1)时,总是需要一个构造基元用于初始化空的当前构造基元集合,这个用于初始化的构造基元称为起始构造基元(beginP)。beginP可以是0-usedP,也可以是1-usedP,但不能是2-usedP。beginP的方向如下设置:
(1)如果beginP是0-usedP,则其方向可以是1,也可以是2;
(2)如果beginP是1-usedP,并且beginP位于结果基元集合的外轮廓上,则选择beginP曾经用过的方向;
(3)如果beginP是1-usedP,并且beginP不位于结果基元集合的外轮廓上,则选择beginP未曾用过的方向。
以上为搜索结果基元集合的三大步骤,以及构造基元按照其具体使用情况的分类。事实上,构造基元还可以按照其物理位置或雇佣位置给予分类。此处的“物理位置”,指的是构造基元实体的客观存在位置;此处的“雇佣位置”,描述了构造基元在整个构造过程中是如何被使用的,包括是作为输入值、还是作为输出值;是尚未被使用过、还是已经被使用过1次、还是已经被使用过2次。
针对所有构造基元,按照其物理位置分类,总是可以分为2大类:
(1)外部构造基元(eP):位于外轮廓上的构造基元;
(2)内部构造基元(iP):移除所有外部构造基元之后的剩余构造基元;
针对所有构造基元,按照其雇佣位置分类,总是可以分为6大类:
(1)输入构造基元st1:从外轮廓上进入的构造基元。它在搜索外轮廓时已被使用过,曾使用过的方向被用作st1的方向;
(2)输入构造基元st2:从内部进入并且已被使用过一次的构造基元。未使用过的方向被用作st2的方向;
(3)输入构造基元st3:从内部进入并且从未被使用过的构造基元。任意一个方向(即1或2)都可以作为st3的方向;
(4)输出构造基元ob:出现在外轮廓上的构造基元。它在计算外轮廓时已被使用过一次,计算得到的方向一定是曾经使用过的方向;
(5)输出构造基元tw:出现在内部并且已被使用过一次的构造基元。计算得到的方向一定是未使用过的方向;
(6)输出构造基元normal:出现在内部并且尚未被使用过的构造基元。记录下计算得到的方向。
针对以上按照物理位置和雇佣关系分类的构造基元,总是满足:
st1+ob=eP (1)
st2+tw=iP (2)
st3+normal=iP (3)
公式(3)阐述了内部构造基元(iP)第1次被使用的过程;
公式(2)阐述了内部构造基元(iP)第2次被使用的过程;
公式(1)阐述了外部构造基元(eP)第2次被使用的过程;
而外部构造基元(eP)第1次被使用的过程体现为整个大步骤(2);
值得注意的是,以上ACSEBUL的三大步骤是抽象的、归纳的,紧扣其基本原理展开。ACSEBUL可以具体化为2D ACSEBUL和3D ACSEBUL。其中,2D ACSEBUL用于通过1维边/链拓扑自动构建2维多边形,其同样包含三个大步骤,2D ACSEBUL中的大步骤遵循ACSEBUL中大步骤的原理,但同时具体地、细致地展开;3D ACSEBUL用于通过2维平面片拓扑自动构建3维实体,其同样包含三个大步骤,3D ACSEBUL中的大步骤同样遵循ACSEBUL中大步骤的原理,但同时也是具体地、细致地展开。
注意,为描述统一且清晰,以上描述抽象的ACSEBUL时,-P为-Primitive的缩写(表明是“基元”)。以下描述具体的2D ACSEBUL时,-E是-Edge的缩写(表明是“边”),-C是-Chain的缩写(表明是“链”)。同样的,如下描述具体的3D ACSEBUL时,-F是-Facet的缩写(表明是“平面片”)。
ACSEBUL的具体化
如上所述,ACSEBUL可以应用于2维情况(即通过1维边/链拓扑自动构建2维多边形),即2D ACSEBUL;ACSEBUL还可以应用于3维情况(即通过2维平面片拓扑自动构建3维实体),即3D ACSEBUL。为便于实施参考期间,在这里,首先具体阐述2D ACSEBUL,之后再具体阐述3D ACSEBUL。其中,在阐述2D ACSEBUL时,由于“通过1维边拓扑自动构建2维多边形”与“通过1维链拓扑自动构建2维多边形”,在原理上大部分相同,只是实现手段上存在部分差异,为了论述清晰,首先完整阐述前者,之后针对后者只论述其与前者的差异所在。
--2D ACSEBUL(应用于边)
2D ACSEBUL(应用于边)中的构造基元是1维边,结果基元是2维多边形。为便于本领域技术人员实施参考起见,提供相应具体说明如下。
首先,给予2D ACSEBUL(应用于边)中所有基元的具体定义:
(1)节点(2D Point)
节点(2D Point)是嵌入二维空间的一类0维基元,它记录了X,Y坐标信息。
(2)边(2D Edge)
边(2D Edge)是嵌入于二维空间中的一类1维基元,它是由起始节点和终止节点封闭的一条有向直线段。边的物理方向由起始节点指向终止节点。边的起始节点和终止节点不能是同一个点。
边通常也称弧段。边同胚于1维流形。
(3)环(2D Ring)
环(2D Ring)是嵌入于二维空间中的一类1维基元,它由至少3条边封闭而成。
环是边的聚合。同时,环是封闭的,即构成环的第一条边和最后一条边具有公共节点。
(4)多边形(Polygon)
多边形(Polygon)是嵌入于二维空间中的一类2维基元,它由至少3条边封闭而成。多边形的边界是环。多边形内部不存在其它基元,多边形也称最小多边形。
这里规定,多边形没有内环,只有唯一外环,唯一外环中边的走向为逆时针。
一条边的物理方向只有一个,该物理方向可由边的起始节点指向终止节点的矢量给予表达,具有客观的计算数值。与此不同,一条边的方向是主观上定义的,这里认为有两个方向,即左向(标记为“1”)和右向(标记为“2”)。其中,针对某边而言,当该边的起始节点指向终止节点形成的走向与包含该边的某多边形唯一外环中边的走向一致时,此时的边(注意:不用“该边”,而用“此时的边”)称为右侧边,该多边形称为左多边形;当该边的起始节点指向终止节点形成的走向与包含该边的多边形唯一外环中边的走向不一致时,此时的边(注意:不用“该边”,而用“此时的边”)称为左侧边,该多边形称为右多边形。之所以认为边的方向有两个,是因为一条边既是多边形A的右侧边,同时也是多边形B的左侧边,多边形A与多边形B通过该边邻接。
在2D ACSEBUL(应用于边)中,构造基元是构造边,结果基元是结果多边形。
在2D ACSEBUL(应用于边)中,所有的计算统一位于二维空间(即X,Y坐标系)中。
在2D ACSEBUL(应用于边)中,包括如下三个大步骤:
一.搜索结果多边形集合的外轮廓上的一条边。该大步骤中,包含如下小步骤:
(1.1)创建一条结果边,其内容为空。
(1.2)计算给定边集合的最小外接矩形框。计算该最小外接矩形框的最大Y值,简称最大Y值。(1.3)创建一个相接边集合,内容为空。
(1.4)针对给定边集合中的每条边的每个顶点,比较该顶点的Y值与最大Y值:若相等,则将该边加入以上相接边集合中。
(1.5)针对以上相接边集合,如果存在所有顶点Y值都等于最大Y值的边,将该边记为平行边,并转入步骤(1.6);如果不存在,则转入步骤(1.7)。
(1.6)根据以上平行边的物理方向确定起始节点的位置,进而如下计算该边的方向,并转入步骤(1.9):
(i)若起始节点的X值大于终止节点的X值,则将该边标记为结果边,且结果边的方向为1;
(ii)若起始节点的X值小于终止节点的X值,则将该边标记为结果边,且结果边的方向为2;
(1.7)针对相接边集合中的每条相接边,计算其与二维矢量(-1,0)形成的夹角大小,该夹角记为“原始夹角”。
(1.8)针对相接边集合中的每条边,选择“原始夹角”最小的那条边,该边即为结果边。
同时,根据结果边的节点位置判断其方向:
(i)若以上具备最大Y值的顶点是结果边的起始节点,则该边的方向为1;
(ii)若以上具备最大Y值的顶点是结果边的终止节点,则该边的方向为2;
(1.9)搜索结束,以上结果边即为外轮廓上的一条边,返回结果边。
值得注意的是,相接边集合不一定取相接于最大Y值顶点的所有边,也可以取相接于X轴或Y轴其它极值顶点(最大值或最小值均可)的所有边,并相应改动后续步骤。这里的“结果边”即ACSEBUL中的“位于最外侧的构造基元”,也即大步骤一的最终搜索结果。
二.搜索结果多边形集合的外轮廓。该大步骤中,包含如下小步骤:
(2.1)根据大步骤一所得结果,取外轮廓上的一条边,记为外轮廓上任意边。
(2.2)创建外轮廓多边形和当前边集合,内容分别为空;针对当前边集合,需要初始化。
(2.3)针对当前边集合中的每条边,读取此时边的方向,将该边与此时边的方向加入外轮廓多边形中,同时对该边此时方向对应的侧面作标记。具体如下:
(i)若此时边的方向为1(即表明搜索右侧外轮廓多边形),则该边的左侧标记为“已使用”;
(ii)若此时边的方向为2(即表明搜索左侧外轮廓多边形),则该边的右侧标记为“已使用”;
(2.4)针对当前边集合,创建对应的推进边集合,其初始化内容为空。
(2.5)针对当前边集合中的每条边的每个节点(总共2个节点),计算如下两份数据:
(a)最邻近边
与该节点相接的、同样用于构造外轮廓多边形的边,称为最邻近边。与该节点相接的所有边形成一个集合,称为相接边束。最邻近边总是存在于相接边束中。
最邻近边的计算结果,与当前边有关,与当前边的方向有关,与选择的当前边节点无关(尽管计算过程中需要借助当前边节点)。具体如下:
(i)若当前边的方向为1(即表明搜索右侧外轮廓多边形),且选择的是当前边的起始节点,则:在相接边束中,以该节点为中心,从当前边出发,顺着逆时针望去,寻找与当前边夹角最大的那条边,该边是最邻近边;
(ii)若当前边的方向为1(即表明搜索右侧外轮廓多边形),且选择的是当前边的终止节点,则:在相接边束中,以该节点为中心,从当前边出发,顺着逆时针望去,寻找与当前边夹角最小的那条边,该边是最邻近边;
(iii)若当前边的方向为2(即表明搜索左侧外轮廓多边形),且选择的是当前边的起始节点,则:在相接边束中,以该节点为中心,从当前边出发,顺着逆时针望去,寻找与当前边夹角最小的那条边,该边是最邻近边;
(iv)若当前边的方向为2(即表明搜索左侧外轮廓多边形),且选择的是当前边的终止节点,则:在相接边束中,以该节点为中心,从当前边出发,顺着逆时针望去,寻找与当前边夹角最大的那条边,该边是最邻近边;
(b)最邻近边的方向
若最邻近边与当前边相容,则对最邻近边赋予与当前边一样的方向;若最邻近边与当前边不相容,则对最邻近边赋予与当前边不同的方向。具体如下:
(i)若当前边的方向为1,且当前边与最邻近边相容,则最邻近边的方向为1;
(ii)若当前边的方向为1,且当前边与最邻近边不相容,则最邻近边的方向为2;
(iii)若当前边的方向为2,且当前边与最邻近边相容,则最邻近边的方向为2;
(iv)若当前边的方向为2,且当前边与最邻近边不相容,则最邻近边的方向为1;
(2.6)针对以上的对子(即最邻近边,及其方向),若对子在以上外轮廓多边形中不存在,则加入推进边集合;若存在,则不做任何处理,并不再进入(2.7)。
(2.7)清空当前边集合,将推进边集合作为新的当前边集合;之后,清空推进边集合。如此,为下一次迭代作了准备。
(2.8)重复步骤(2.3)-(2.7),直至计算得到的推进边集合为空。此时,以上外轮廓多边形搜索完毕。
值得注意的是,在步骤(2.2)中,当前边集合初始化的内容为外轮廓上任意边。
如前所述,在步骤(2.5)的(b)中,边的相容性由作为低维公共基元的节点在已知边、最邻近边中扮演的角色所决定。等价的,边的相容性即边物理方向的一致性(即是否首尾相接)。
三.搜索结果多边形集合。该大步骤中,包含如下小步骤:
(3.1)输入执行大步骤二搜索所得外轮廓。
(3.2)此时,针对外轮廓上的每一条边,有且只有一侧是“已使用”;
(3.3)创建结果多边形和当前边集合,内容分别为空;针对当前边集合,需要初始化。
(3.4)针对当前边集合中的每条边,读取此时边的方向,并将该边和此时边的方向加入以上结果多边形中,同时对该边此时方向对应的侧面作标记:
(i)若此时边的方向为1(即表明搜索左侧多边形),则该边的右侧标记为“已使用”;
(ii)若此时边的方向为2(即表明搜索右侧多边形),则该边的左侧标记为“已使用”;
由此可见,搜索结果多边形集合时“标记侧面”与搜索外轮廓时“标记侧面”方法相反。
(3.5)针对当前边集合,创建对应的推进边集合,其初始化内容为空;
(3.6)针对当前边集合中每条边的每个节点(总共2个节点),计算如下两份数据:
(a)最邻近边
与该节点相接的、同样用于构成该结果多边形的边,称为最邻近边。与该节点相接的所有边形成一个集合,称为相接边束。最邻近边总是存在于相接边束中。
最邻近边的计算结果,与当前边有关,与当前边的方向有关,与选择的当前边节点无关(尽管计算过程中需要借助当前边节点)。具体如下:
(i)若当前边的方向为1(即表明搜索左侧多边形),且选择的是当前边的起始节点,则:在相接边束中,以该节点为中心,从当前边出发,顺着逆时针望去,寻找与当前边夹角最小的那条边,此时该边是最邻近边;
(ii)若当前边的方向为1(即表明搜索左侧多边形),且选择的是当前边的终止节点,则:在相接边束中,以该节点为中心,从当前边出发,顺着逆时针望去,寻找与当前边夹角最大的那条边,此时该边是最邻近边;
(iii)若当前边的方向为2(即表明搜索右侧多边形),且选择的是当前边的起始节点,则:在相接边束中,以该节点为中心,从当前边出发,顺着逆时针望去,寻找与当前边夹角最大的那条边,此时该边是最邻近边;
(iv)若当前边的方向为2(即表明搜索右侧多边形),且选择的是当前边的终止节点,则:在相接边束中,以该节点为中心,从当前边出发,顺着逆时针望去,寻找与当前边夹角最小的那条边,此时该边是最邻近边。
由此可见,搜索结果多边形集合时“计算最邻近边”与搜索外轮廓时“计算最邻近边”方法相反。
(b)最邻近边的方向
(i)若当前边的方向为1,且当前边与最邻近边相容,则最邻近边的方向为1;
(ii)若当前边的方向为1,且当前边与最邻近边不相容,则最邻近边的方向为2;
(iii)若当前边的方向为2,且当前边与最邻近边相容,则最邻近边的方向为2;
(iv)若当前边的方向为2,且当前边与最邻近边不相容,则最邻近边的方向为1;
由此可见,搜索结果多边形集合时“计算最邻近边的方向”与搜索外轮廓时“计算最邻近边的方向”方法相同。
(3.7)针对以上得到的每个对子(即最邻近边,及其方向),若其在以上结果多边形中不存在,则加入以上推进边集合;若存在,则不做任何处理,并不再进入(3.8)。
(3.8)清空当前边集合,将推进边集合作为新的当前边集合;之后,清空推进边集合。如此,为下一次迭代作了准备。
(3.9)重复步骤(3.4)-(3.8),直至计算得到的推进边集合为空。此时,以上结果多边形搜索完毕。(3.10)重复步骤(3.3)-(3.9),直至给定边集合中的每条边已经使用2次。此时,所有结果多边形都搜索完毕。
值得注意的是,每次进入步骤(3.4)时,初始给定的构造边集合都会更新。尽管如此,无论如何更新,初始给定的构造边始终可分为如下三类:
(1)0-usedE(即左侧“未使用”并且右侧“未使用”);
(2)1-usedE(即左侧“已使用”但右侧“未使用”,或者左侧“未使用”但右侧“已使用”);
(3)2-usedE(即左侧“已使用”并且右侧“已使用”);
同时,每次进入步骤(3.3)时,总是选择给定边集合中的1条边用于初始化空的当前边集合,该边称为起始构造边(beginE)。beginE可以是0-usedE,也可以是1-usedE,但不能是2-usedE。
同时,beginE的方向如下指定:
(1)若beginE是0-usedE,则其方向可以是1也可以是2(即可先搜索左侧多边形,也可以搜索右侧多边形);
(2)若beginE是1-usedE,且beginE位于结果多边形集合的外轮廓上,则选取之前已使用过的方向(即若已使用过方向1,则再次选择方向1;若已使用过方向2,则再次选择方向2);
(3)若beginE是1-usedE,且beginE不位于结果多边形集合的外轮廓上,则选取尚未用过的方向(即若已使用过方向1,则选取方向2;若已使用过方向2,则选取方向1);
同样的,针对所有构造边,按照其物理位置分类,总是可以分为2大类:(1)外部构造边(eE);(2)内部构造边(iE)。针对所有构造边,按照其雇佣位置分类,总是可以分为6大类:(1)输入构造边st1;(2)输入构造边st2;(3)输入构造边st3;(4)输出构造边ob;(5)输出构造边tw;(6)输出构造边normal。满足公式如下:
st1+ob=eE (4)
st2+tw=iE (5)
st3+normal=iE (6)
附图1和附图2通过一个简单示例给予了以上三个大步骤的图形化阐述。在该示例中,初始给定24条构造边,每条边的物理方向如黑色小箭头所示,最终搜索结果为9(3×3)个结果多边形。(值得注意的是,为阐述直观,以上输入构造边st1采用附图1和附图2中三角形表达;输入构造边st2采用附图1和附图2中圆形表达;输入构造边st3采用附图1和附图2中四边形表达。)
更具体的,
附图1阐述了搜索结果多边形集合的外轮廓上的一条边,然后从该条边出发搜索到外轮廓的过程。从(a)部分初始给定的边集合开始,搜索外轮廓如(b)部分。其中,搜索到的外轮廓上的一条边为边a且其方向为2(标记为enter)。之后从该边出发,根据边的节点位置和边的物理方向从而计算最邻近边(沿着虚线箭头,找到边b和边c),并根据边之间的相容性赋予方向(分别赋予方向1和2);之后,再次找到最邻近边(沿着实线箭头,找到边d和边e),并赋予方向(分别赋予方向1和2);之后,再次找到最邻近边(沿着虚线箭头,找到边f和边g),并赋予方向(分别赋予方向1和1);如此迭代,总共经过6次,继续寻找到边h、i,边j、k,直至找到边l并赋予方向1(标记为end),至此搜索外轮廓结束。以上整个步 骤可命名为step0。
附图2阐述了搜索结果多边形集合的过程。这里显示了1条搜索路径。具体的,
首先,进入step1中,所有边都未被访问过,任选一条边,输入边为st1(选择用过方向,参考step0);第一次遍历到1个ob(与用过方向相同,参考step0)和1个normal(记录下方向);第二次遍历到1个normal(记录下方向);结束遍历,搜索到最小多边形p1,剔除2条边(每条边都被使用了2次)。
之后,进入step2中,从剩余边中选择任意一条边,输入边位st1(选择用过方向,参考step0);第一次遍历到1个ob(与用过方向相同,参考step0)和1个normal(记录下方向);第二次遍历到1个normal(记录下方向);结束遍历,搜索到最小多边形p2,剔除2条边(每条边都被使用了2次)。
之后,进入step3中,从剩余边中选择任意一条边,输入边位st2(选择尚未用过方向,参考step2);第一次遍历到1个normal(记录下方向)和1个ob(与用过方向相同,参考step0);第二次遍历到1个tw(与用过方向相反,参考step1);结束遍历,搜索到最小多边形p3,剔除3条边(每条边都被使用了2次)。
之后,进入step4中,从剩余边中选择任意一条边,输入边为st1(选择使用过方向,参考step0);第一次遍历到1个normal(记录下方向)和1个tw(与用过方向相反,参考step1);第二次遍历到1个normal(记录下方向);结束遍历,搜索到最小多边形p4,剔除2条边(每条边都被使用了2次)。
之后,进入step5中,从剩余边种选择任意一条边,输入边为st3(选择方向1或2皆可,这里选择1);第一次遍历到1个normal(记录下方向)和1个tw(与用过方向相反,参考step4);第二次遍历到1个tw(与用过方向相反,参考step3);结束遍历,搜索到最小多边形p5,剔除2条边(每条边都被使用了2次)。
之后,进入step6中,从剩余边种选择任意一条边,输入边为st2(选择尚未用过方向,参考step5);第一次遍历到1个normal(记录下方向)和1个normal(记录下方向);第二次遍历到1个ob(与用过方向相同,参考step0);结束遍历,搜索到最小多边形p6,剔除2条边(每条边都被使用了2次)。
之后,进入step7中,从剩余边种选择任意一条边,输入边为st2(选择尚未用过方向,参考step5);第一次遍历到1个normal(记录下方向)和1个tw(与用过方向相反,参考step2);第二次遍历到1个ob(与用过方向相同,参考step0);结束遍历,搜索到最小多边形p7,剔除3条边(每条边都被使用了2次)。
之后,进入step8中,从剩余边种选择任意一条边,输入边为st1(选择用过方向,参考step0);第一次遍历到1个tw(与用过方向相反,参考step6)和1个ob(与用过方向相同,参考step0);第二次遍历到1个tw(与用过方向相反,参考step7);结束遍历,搜索到最小多边形p8,剔除4条边(每条边都被使用了2次)。
之后,进入step9中,从剩余边中选择任意一条边,输入边为st2(选择尚未用过方向,参考step6);第一次遍历到1个ob(与用过方向相同,参考step0)和1个tw(与用过方向相反,参考step4);第二次遍历到1个ob(与用过方向相同,参考step0);结束遍历,进入 step10中,搜索到最小多边形p9,剔除4条边(每条边都被使用了2次)。
至此,所有边都被剔除,9个最小多边形都搜索完毕,即每个最小多边形不仅正确地包含了边,同样正确地包含了边的方向(如附图2右侧所示)。
同样的,满足公式(4)-(6)(如附图2下侧所示)。
更为具体的,输入构造边st1的个数4与输出构造边ob的个数8之和为外部构造边(eE)的个数12,即描述了外部构造边(eE)第2次被使用的过程(1-used->2-used);输入构造边st2的个数4与输出构造边tw的个数8之和为内部构造边(iE)的个数12,即描述了内部构造边(iE)第2次被使用的过程(1-used->2-used);输入构造边st3的个数1与输出构造边normal的个数11之和为内部构造边(iE)的个数12,即描述了内部构造边(iE)第1次被使用的过程(0-used->1-used);而外部构造边(eE)第1次被使用的过程体现在step0中。
--2D ACSEBUL(应用于链)
同样,首先给出2D ACSEBUL(应用于链)中基元的定义:
(1)链(Chain)
链(Chain)是嵌入二维空间中的一类1维基元,它由至少1条边构成。1条链包含2个端点,称为该链的链起始节点、链终止节点。
当链只由1条边构成时,该边的物理方向即该链的物理方向。但是,一般情况下,1条链由多条边构成,此时链没有物理方向。因此,统一称链没有物理方向,这是更为严格的约定,并不影响结果。
链可以是闭合链,即构成链的边彼此连接形成一个回路。闭合链包含至少3条边。链同胚于1维流形。
(2)链节点(Chain End)
链节点(Chain End)是嵌入二维空间中的一类1维基元,它记录了X,Y坐标。
链节点是链的边界,好比节点是边的边界。当链只由1条边构成时,该边的起始节点和终止节点就分别是该链的链起始节点和链终止节点。
(3)多边形(Polygon)的补充信息
多边形(Polygon)可以认为由至少3条边封闭而成,也可以认为由至少1条链封闭而成。因此,多边形的边界可以认为是边,也可以认为是链。
如上所述,一条链没有客观的物理方向。尽管如此,主观认为链的方向仍然存在,而且一条链存在两个方向,即左向(标记为“1”)和右向(标记为“2”)。其中,当链的链起始节点指向链终止节点形成的走向与包含该链的某多边形的唯一外环中该链的走向一致时,此时的链(注意:不用“该链”,而用“此时的链”)称为右侧链,该多边形称为左多边形;当该链的链起始节点指向链终止节点形成的走向与包含该链的某多边形的唯一外环中链的走向不一致时,此时的链(注意:不用“该链”,而用“此时的链”)称为左侧链,该多边形称为右多边形。之所以认为链的方向有两个,是因为一条链既是多边形A的右侧链,同时也是多边形B的左侧链,多边形A与多边形B通过该链邻接。
在2D ACSEBUL(应用于链)中,构造基元是构造链,结果基元是结果多边形。
在2D ACSEBUL(应用于链)中,所有的计算统一位于二维平面(即X,Y坐标系)中。
在2D ACSEBUL(应用于链)中,包括三个大步骤:一.搜索结果多边形集合的外轮廓上的一条链;二.搜索结果多边形集合的外轮廓;三.搜索结果多边形集合
针对2D ACSEBUL(应用于链),与2D ACSEBUL(应用于边)基本相同,包括三个大步骤(故而三大步骤的具体分解为小步骤本发明不予赘述)。不同之处在于,确定链的方向(dir)要比确定边的方向复杂。这里规定,链的方向由边的方向(包含在该链中的边)、链节点与边节点之间的步长(Step Size)所决定,如附图3所示。具体地,
(1)计算链的起始节点至边的起始节点的步长,记为sz1;
(2)计算链的起始节点至边的终止节点的步长,记为sz2;
(3)比较sz1与sz2。如果sz1大于sz2,则两者方向相反(如附图3a所示,链的起始节点与边的起始节点之间的步长为11,链的起始节点与边的终止节点之间的步长为10,前者大于后者,则两者方向相反);如果sz1小于sz2,则两者方向相同(如附图3b所示,链的起始节点与边的起始节点之间的步长为3,链的起始节点与边的终止节点之间的步长为4,前者小于后者,则两者方向相同)。
同样的,针对所有构造链,按照其物理位置分类,总是可以分为2大类:(1)外部构造链(eC);(2)内部构造链(iC)。针对所有构造链,按照其雇佣位置分类,总是可以分为6大类:(1)输入构造链st1;(2)输入构造链st2;(3)输入构造链st3;(4)输出构造链ob;(5)输出构造链tw;(6)输出构造链normal。同样的,针对这些分类的构造链,满足公式(7)-(9)。
st1+ob=eC (7)
st2+tw=iC (8)
st3+normal=iC (9)
--3D ACSEBUL
如上所述,ACSEBUL可以应用于3维情况(即通过2维平面片拓扑自动构建3维体),即3D ACSEBUL。
同样,首先给予3D ACSEBUL中所有基元的定义:
(1)节点(3D Point)
节点是嵌入三维空间中的一类0维基元,它记录了X,Y,Z坐标。
(2)边(3D Edge)
边(3D Edge)是嵌入三维空间中的一类1维基元,它是由起始节点和终止节点封闭的一条有向直线段。边的物理方向由边的起始节点指向边的终止节点。边的起始节点和终止节点不能是同一个点。
(3)环(3D Ring)
环(3D Ring)是嵌入三维空间中的一类1维基元,它由至少3条边封闭而成。
环是边的聚合。环是封闭的,即构成环的第一条边和最后一条边具有公共节点。
尽管没有显式约束构成环的所有边必须位于同一平面上,但直接引用该环的只有平面片对象,而平面片的所有边位于同一平面上,所以默认构成环的所有边位于同一平面上。
(4)平面片(Facet)
平面片(Facet)是嵌入三维空间中得一类2维基元,它是由唯一外环、零至多个内环共同封闭而成的区域。平面片的边界是环。一个平面片包含至少3条边。
平面片是相对简单多边形,平面片可以是凸的,可以是凹的。
平面片具有法向量,其是客观的,可以采用3维矢量客观表达。
任一平面片都具有两侧,其是主观定义的。因为每个平面片都有一个所在超平面,该超平面片将三维空间分成两个部分,一般把平面片法向量所在的一侧称为正面,把异于平面片法向量所在的一侧称为背面。
(5)体(Body)
体(Body)是嵌入三维空间中的一类3维基元,它由于至少4个平面片封闭而成。体的边界是平面片。体内不存在其它基元,体也称最小体。
一个平面片的法向量只有一个,其是客观的,可以采用3维矢量表达。与此不同,一个平面片的方向是主观定义的,而且认为有两个,即后向(标记为“1”)和前向(标记为“2”)。其中,针对某个平面片而言,当该平面片的法向量指向某个体的外部时,此时的平面片(注意:不用“该平面片”,而用“此时的平面片”)称为前向平面片(即使用了平面片的正面),该体称为后向体;当该平面片的法向量指向某个体的内部时,此时的平面片(注意:不用“该平面片”,而用“此时的平面片”)称为后向平面片(即使用了平面片的背面),该体称为前向体。
之所以认为平面片的方向有两个,是因为一个平面片既是体A的前向平面片,同时也是体B的后向平面片,体A与体B通过该平面片邻接。
在3D ACSEBUL中,构造基元是构造平面片,结果基元是结果体。
在3D ACSEBUL中,所有的计算统一位于三维空间(即X,Y,Z坐标系)中。
在3D ACSEBUL中,包括三个大步骤:
一.搜索结果体集合的外轮廓上的一个平面片。该大步骤中,包含如下小步骤:
(1.1)创建一个结果平面片,内容为空;
(1.2)计算给定平面片集合的最小外接盒。计算该最小外接盒的最大Z值,简称最大Z值。
(1.3)创建一个相接平面片集合,内容为空。
(1.4)针对给定平面片集合中的每个平面片的每个顶点,比较该顶点的Z值与最大Z值:若相等,则将该平面片加入以上相接平面片集合中。
(1.5)针对以上相接平面片集合,如果存在所有顶点Z值等于最大Z值的平面片,将该平面片记为平行平面片,并转入步骤(1.6);如果不存在,则转入步骤(1.7)。
(1.6)比较平行平面片的法向量与三维矢量(0,0,1)的夹角大小从而确定其方向,转入步骤(1.9):
(i)若两者夹角为0,则将该平面片标记为结果平面片,且结果平面片的方向为1;
(ii)若两者夹角为180,则将该平面片标记为结果平面片,且结果平面片的方向为2;
(1.7)针对相接平面片集合中的每个平面片,计算其法向量与三维矢量(0,0,1)的夹角,该夹角记为“原始夹角”。比较原始夹角与90度并如下处理:
(i)若原始夹角处于(0,90),则不处理;
(ii)若原始夹角处于(90,180),则将180减去原始夹角,结果标记为“处理夹角”;
(1.8)针对相接平面片集合中的每个平面片,选择其“处理夹角”最小的那个平面片,将该平面片标记为结果平面片。
同时,根据结果平面片的“原始夹角”计算结果平面片的方向:
(i)若原始夹角处于(0,90),则结果平面片的方向为1;
(ii)若原始夹角处于(90,180),则结果平面片的方向为2;
(1.9)搜索结束,以上结果平面片即为外轮廓上的平面片,并返回结果平面片。
值得注意的是,相接平面片集合不一定取相接于最大Z值的顶点的所有平面片,也可以取相接于X轴或Y轴或Z轴其它极值顶点(最大值或最小值均可)的所有平面片,并相应改动后续步骤。这里的“结果平面片”即ACSEBUL中的“位于最外侧的结果构造基元”,也即大步骤一的最终搜索结果。
二.搜索结果体集合的外轮廓。该大步骤中,包含如下小步骤:
(2.1)根据大步骤一所得结果,取外轮廓上的一个平面片,记为外轮廓上平面片。
(2.2)创建外轮廓体和当前平面片集合,内容分别为空;针对当前平面片集合,需要初始化。
(2.3)针对当前平面片集合中的每个平面片,读取此时平面片的方向,将该平面片以及此时的方向加入外轮廓体中,同时对该平面片此时方向对应的侧面作标记:
(i)若此时平面片的方向为1(即表明搜索前向外轮廓体),则该平面片背面标记为“已使用”;
(ii)若此时平面片的方向为2(即表明搜索后向外轮廓体),则该平面片正面标记为“已使用”;
(2.4)针对当前平面片集合,创建相应的推进平面片集合,其初始化内容为空。
(2.5)针对当前平面片集合中的每个平面片的每条边,计算如下两份数据:
(a)最邻***面片
与该边相接的、同样用于构成外轮廓体的平面片,称为最邻***面片。与该边相接的所有平面片形成一个集合,称为相接平面片束。最邻***面片总是存在于相接平面片束中。
最邻***面片的计算结果,与当前平面片有关,与当前平面片的方向有关。具体如下:
(i)若当前平面片的方向为1(即表明搜索前向外轮廓体),则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最小的那个平面片,此时该平面片是最邻***面片;
(ii)若当前平面片的方向为2(即表明搜索后向外轮廓体),则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最大的那个平面片,此时该平面片是最邻***面片;
(b)最邻***面片的方向
若最邻***面片与当前平面片相容,则对最邻***面片赋予与当前平面片一样的方向;若最邻***面片与当前平面片不相容,则对最邻***面片赋予与当前平面片不同的方向。具体如下:
(i)若当前平面片方向为1,且当前平面片与最邻***面片相容,则最邻***面片方向为1;
(ii)若当前平面片方向为1,且当前平面片与最邻***面片不容,则最邻***面片方向为2;
(iii)若当前平面片方向为2,且当前平面片与最邻***面片相容,则最邻***面片方向为2;
(iv)若当前平面片方向为2,且当前平面片与最邻***面片不容,则最邻***面片方向为1;
(2.6)针对以上得到的每个对子(即最邻***面片,及其方向),若该对子在以上外轮廓体中不存在,则加入以上推进平面片集合;若存在,则不做任何处理,并停止进入(2.7)。
(2.7)清空当前平面片集合,将推进平面片集合作为新的当前平面片集合;之后,清空推进平面片集合。如此,为下一次迭代作了准备。
(2.8)重复步骤(2.3)-(2.7),直至计算得到的推进平面片集合为空。此时,以上外轮廓体搜索完毕。
值得注意的是,在步骤(2.2)中,当前平面片集合的初始化值为外轮廓上平面片。
如前所述,在步骤(2.5)的(b)中,平面片的相容性由已知平面片、最邻***面片在作为低维公共基元的边处的走向所决定。等价的,平面片的相容性即平面片法向量的一致性(即是否位于平面片的同一侧)。
三.搜索结果体集合。该大步骤中,包含如下小步骤:
(3.1)输入大步骤二所得外轮廓体。
(3.2)此时,针对外轮廓体中的每个平面片,有且只有一侧是“已使用”。
(3.3)创建结果体和当前平面片集合,内容分别为空;针对当前平面片集合,需要初始化。
(3.4)针对当前平面片集合中的每个平面片,读取此时平面片的方向,并将该平面片以及此时的平面片方向加入以上结果体中,同时对该平面片此时方向对应的侧面标记为“已使用”。具体如下:
(i)若此时平面片的方向为1(即表明搜索后向结果体),则该平面片的正面标记为“已使用”;
(ii)若此时平面片的方向为2(即表明搜索前向结果体),则该平面片的背面标记为“已使用”;
由此可见,搜索结果体集合时“标记侧面”与搜索外轮廓体时“标记侧面”方法相反。
(3.5)针对当前平面片集合,创建推进平面片集合,其初始化内容为空。
(3.6)针对当前平面片集合中的每个平面片的每条边,计算如下两份数据:
(a)最邻***面片
与该边相接的、同样用于构成结果体的平面片,称为最邻***面片。与该边相接的所有平面片形成一个集合,称为相接平面片束。最邻***面片总是存在于相接平面片束中。
最邻***面片的计算结果,与当前平面片有关,与当前平面片的方向有关。具体如下:
(i)若当前平面片的方向为1(即表明搜索后向结果体),则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最大的那个平面片,此时该平面片是最邻***面片;
(ii)若当前平面片的方向为2(即表明搜索前向结果体),则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最小的那个平面片,此时该平面片是最邻***面片;
由此可见,搜索结果体集合时“计算最邻***面片”与搜索外轮廓体时“计算最邻***面片”方法相反。
(b)最邻***面片的方向
(i)若当前平面片方向为1,且当前平面片与最邻***面片相容,则最邻***面片方向为1;
(ii)若当前平面片方向为1,且当前平面片与最邻***面片不容,则最邻***面片方向为2;
(iii)若当前平面片方向为2,且当前平面片与最邻***面片相容,则最邻***面片方向为2;
(iv)若当前平面片方向为2,且当前平民片与最邻***面片不容,则最邻***面片方向为1;
由此可见,搜索结果体集合时“计算最邻***面片的方向”与搜索外轮廓体时“计算最邻***面片的方向”方法相同。
(3.7)针对以上得到的每个对子(即最邻***面片,及其方向),若对子在以上结果体中不存在,则加入以上推进平面片集合;若存在,则不做任何处理,并停止进入(3.8)。
(3.8)清空当前平面片集合,将推进平面片集合作为新的当前平面片集合;之后,清空推进平面片集合。如此,为下一次迭代作了准备。
(3.9)重复步骤(3.4)-(3.8),直至计算得到的推进平面片集合为空。此时,以上结果体搜索完毕。
(3.10)重复步骤(3.3)-(3.9),直至给定平面片集合中的每个平面片都已使用2次。此时,所有结果体搜索完毕。
值得注意的是,每次进入步骤(3.4)时,初始给定的构造平面片集合都会更新。尽管如此,无论如何更新,初始给定的构造平面片总是可以分为如下三类:
(1)0-usedF(即前向“未使用”并且后向“未使用”);
(2)1-usedF(即前向“已使用”但后向“未使用”,或者前向“未使用”但后向“已使用”);
(3)2-usedF(即前向“已使用”并且后向“已使用”);
同时,每次进入步骤(3.3)时,总是选择给定平面片集合中的1个平面片用于初始化空的当前平面片集合,该平面片称为起始构造平面片(beginF)。beginF可以是0-usedF,也可以是1-usedF,但不能是2-usedF。
同时,beginF的方向如下指定:
(1)若beginF是0-usedF,则其方向可以是1也可以是2(即可以搜索后向体,也可以搜索前向体);
(2)若beginF是1-usedF,且beginF位于结果体集合的外轮廓上,则选取之前已用过的方向(即若已用过方向1,则再次选取方向1;若已用过方向2,则再次选取方向2);
(3)若beginF是1-usedF,且beginF不位于结果体集合的外轮廓上,则选取尚未用过的方向(即若已用过方向1,则选取方向2;若已用过方向2,则选取方向1);
同样的,针对所有构造平面片,按照其物理位置分类,总是可以分为2大类:(1)外部构造平面片(eF);(2)内部构造平面片(iF)。针对所有构造平面片,按照其雇佣位置分类,总是可以分为6大类:(1)输入构造平面片st1;(2)输入构造平面片st2;(3)输入构造平面片st3;(4)输出构造平面片ob;(5)输出构造平面片tw;(6)输出构造平面片normal。满足如下公式:
st1+ob=eF (10)
st2+tw=iF (11)
st3+normal=iF (12)
附图4和附图5通过一个简单示例给予了以上三个大步骤的图形化阐述。在该示例中,初始给定的是平面片集合,每个平面片的法向量如黑色小箭头所示(法向量垂直于所属平面片),最终搜索结果是最小体集合。该示例本该是立体图,限于平面说明,这里只展示垂直方向上的平面片,垂直方向上的平面片从图中视角望去简化为了一条边,该边事实上代表的是2维平面片。水平方向上平面片的被调用情况与以上垂直方向上平面片的被调用情况一样,故在此略。(同样的,为阐述直观,以上输入构造平面片st1采用附图4和附图5中三角形表达;输入构造平面片st2采用附图4和附图5中圆形表达;输入构造平面片st3采用附图4和附图5中四边形表达。)
更为具体的,
附图4阐述了搜索结果体集合的外轮廓上的一个平面片,然后从该平面片出发搜索到外轮廓的过程。从(a)部分初始给定的平面片集合开始,搜索外轮廓如(b)部分。更为具体地,搜索到的外轮廓上的一个平面片为平面片a且其方向为1(标记为enter)。之后,从该平面片开始,根据构成该平面片的边和该平面片的法向量找到最邻***面片(沿着虚线箭头,找到平面片c和平面片b),并根据平面片之间的相容性赋予方向(分别赋予方向1和2);之后,再次找到最邻***面片(沿着实线箭头,找到平面片d和平面片e),并赋予方向(分别赋予方向2和1);之后,在此寻找最邻***面片(沿着虚线箭头,找到平面片f和平面片g),并赋予方向(分别赋予方向1和1);如此总共经过6次迭代,继续寻找到平面片h、i,边j、k,直至找到平面片l并赋予方向2(标记为end),至此搜索外轮廓结束。以上整个步骤可命 名为step0。
附图5阐述了搜索结果体集合的过程。这里显示了一条搜索路径。具体的,
首先,进入step1中,所有面都未被访问,任选一个输入面,输入面为st1(选择用过方向,参考step0);第一次遍历到1个ob(与用过方向相同,参考step0)和1个normal(记录下方向);第二次遍历到1个normal(记录下方向);结束遍历,搜索到最小体b1,剔除2个面(每个面都被使用了2次)。
之后,进入step2中,从剩余面中选择任意一个平面片,输入面为st1(选择用过方向,参考step0);第一次遍历到1个tw(与之前用过方向相反,参考step1)和1个normal(记录下方向);第二次遍历到1个normal(记录下方向);结束遍历,搜索到最小体b2,剔除2个面(每个面都被使用了2次)。
之后,进入step3中,从剩余面中选择任意一个平面片,输入面为st2(选择尚未使用过方向,参考step1);第一次遍历到1个ob(与之前用过方向相同,参考step0)和1个normal(记录下方向);第二次遍历到1个normal(记录下方向);结束遍历,搜索到最小体b3,剔除2个面(每个面都被使用了2次)。
之后,进入step4中,从剩余面中选择任意一个平面片,输入面为st1(选择用过方向,参考step0);第一次遍历到1个tw(与之前用过方向相反,参考step3)和1个ob(与之前用过方向相反,参考step0);第二次遍历到1个normal(记录下方向);结束遍历,搜索最小体b4,剔除3个面(每个面都被使用了2次)。
之后,进入step5中,从剩余面中选择任意一个平面片,输入面为st2(选择尚未使用过方向,参考step2);第一次遍历到1个normal(记录下方向)和1个ob(与之前用过方向相同,参考step0);第二次遍历到1个ob(与用过方向相同,参考step0);结束遍历,搜索到最小体b5,剔除3个面(每个面都被使用了2次)。
之后,进入step6中,从剩余面中选择任意一个平面片,输入面为st3(选择方向1或2皆可,这里选择1);第一次遍历到1个ob(与用过方向相同,参考step0)和1个normal(记录下方向);第二次遍历到1个tw(与用过方向必然相反,参考step5);结束遍历,搜索到最小体b6,剔除2个面(每个面都被使用了2次)。
之后,进入step7中,从剩余面中选择任意一个平面片,输入面为st2(选择尚未使用过方向,参考step6);第一次遍历到1个normal(记录下方向)和1个tw(与用过方向必然相反,参考step2);第二次遍历到1个tw(与用过方向相同,参考step3);结束遍历,搜索到最小体b7,剔除3个面(每个面都被使用了2次)。
之后,进入step8中,从剩余面中选择任意一个平面片,输入面为st2(选择尚未使用过方向,参考step7);第一次遍历到1个normal(记录下方向)和1个tw(与用过方向必然相反,参考step4);第二次遍历到1个ob(与用过方向相同,参考step0);结束遍历,搜索到最小体b8,剔除3个面(每个面都被使用了2次)。
之后,进入step9中,从剩余面中选择任意一个平面片,输入面为st1(选择用过方向,参考step0);第一次遍历到1个ob(与用过方向相同,参考step0)和1个tw(与用过方向必然相反,参考step6);第二次遍历到1个tw(与用过方向必然相反,参考step8);结束遍历,进入step10中,搜索到最小体b9,剔除4个面(每个面都被使用了2次)。
至此,所有24个面都被剔除,9个最小体都搜索完毕,即每个最小体不仅正确地包含了相应的平面片,同时正确地包含了平面片的方向(如附图5右侧所示)。
同样的,满足公式(10)-(12)(如附图5下侧所示)。更为具体的,输入构造平面片st1的个数4与输出构造平面片ob的个数8之和为外部构造平面片(eF)的个数12,即描述外部构造平面片(eF)第2次被使用的过程;输入构造平面片st2的个数4与输出构造平面片tw的个数8之和为内部构造平面片(iF)的个数12,即描述了内部构造平面片(iF)第2次被使用的过程;输入构造平面片st3的个数1与输出构造平面片normal的个数11之和为内部构造平面片(iF)的个数12,即描述了内部构造平面片(iF)第1次被使用的过程;外部构造平面片(eF)第1次被使用的过程体现在step0中。
案例数据验证
为便于理解本发明效果起见,采用实际案例数据给予ACSEBUL方法的正确性验证。其中,二维实际案例数据采用的是中国广东省深圳市福田区和龙岗区的二维宗地数据(即用于验证2D ACSEBUL),三维实际案例数据采用的是中国广东省深圳市福田区瀚盛花园小区的三维建筑体数据(即用于验证3D ACSEBUL)。最终构造情况都采用欧拉公式给予验证。具体的,
针对深圳市福田区的二维宗地数据,存在连通分支(CC)共665个,构造边(E)共14,442个,顶点(eV)共12,325个,采用2D ACSEBUL(应用于边)最终构造完成的结果多边形(P)共2,782个,这样的构造情况满足应用于二维空间的欧拉公式(即eV–E+P=CC);针对以上二维数据,如果采用以链为基本单元的数据结构代替以边为基本单元的数据结构,则同样存在连通分支(CC)共665个,构造链(C)共6,403个,链顶点(cE)共4,286个,采用2D ACSEBUL(应用于链)最终构造完成的结果多边形(P)同样也是2,782个,这样的构造情况同样满足应用于二维空间的欧拉公式(即cE-C+P=CC)。以上两种情况都验证了2D ACSEBUL的正确性。
针对深圳市龙岗区的二维宗地数据,存在连通分支(CC)共9,113个,构造边(E)共52,395个,顶点(eV)共50,950个,采用2D ACSEBUL(应用于边)最终构造完成的结果多边形(P)共10,558个,这样的构造情况满足应用于二维空间的欧拉公式(即eV–E+P=CC);针对以上二维数据,如果采用以链为基本单元的数据结构代替以边为基本单元的数据结构,则同样存在连通分支共(CC)共9,113个,构造链(C)共12,669个,链顶点(cE)共11,224个,采用2DACSEBUL(应用于链)最终构造完成的结果多边形(P)同样也是10,558个,这样的构造情况同样也满足二维空间的欧拉公式(即cE–C+P=CC)。以上两种情况都验证了2D ACSEBUL的正确性。
针对深圳市福田区瀚盛花园小区的三维建筑体数据,存在连通分支(CC)共1个,构造平面片(F)共2592个,顶点(V)共2797个,边(E)共5118个,内环(L)共18个,亏格(G)共16个,采用3D ACSEBUL最终构造完成的结果体(B)共268个。这样的构造情况满足应用于三维空间的欧拉公式(即[V–E+F–B]–L=CC-G)。这验证了3D ACSEBUL的正确性。
总结而言,无论是在二维空间中构面,或是在三维空间中构体,构面与构体方法的原理在逻辑上是统一的,其抽象与归纳后在本专利中命名为ACSEBUL。ACSEBUL核心内容是针对构造基元赋予方向并在使用过程中作标记、构造基元束的排序。当具体化时,抽象的ACSEBUL可以具体化为二维空间中的2D ACSEBUL,核心内容包括每条边/链有2个方向、通过“构造边束的排序”寻找最邻近边/链、相关最邻近的边/链构成最小多边形、搜索结束时每条边/链被使用且只能被使用2次等;抽象的ACSEBUL还可以具体化为三维空间中的3DACSEBUL,核心内容包括每个平面片有2个方向、通过“构造平面片束的排序”寻找最邻***面片、相关最邻近的平面片构成最小体、搜索结束时每个平面片被使用且只能被使用2次等。以上基于统一逻辑的思想为空间实体的拓扑自动构建提供了一种新方法。
本发明还相应提供一种地理空间实体构建***,将要构建的空间实体结果,称为结果基元;用于构造结果基元的初始给定基元,称为构造基元;设构造基元的维度为n,则由所有相关构造基元共同相接的、比构造基元仅仅低一个维度的基元,称为低维公共基元;以低维公共基元为中心,相接于该中心的所有构造基元形成的辐射状结构,称为构造基元束;包括以下模块,
外轮廓构造基元搜索模块,用于搜索结果基元集合的外轮廓上的任意一个构造基元,包括以下子模块,
最小外包络极值获取子模块,用于计算构造基元集合的最小外包络,获取最小外包络的极值;最外侧构造基元选取子模块,用于计算相接于以上极值的所有构造基元,从中选取位于最外侧的构造基元;
最外侧构造基元方向赋予子模块,用于对于以上位于最外侧的构造基元赋予方向,所述方向为1或2;
结果基元集合外轮廓搜索模块,用于搜索结果基元集合的外轮廓,包括以下子模块,
第一当前构造基元集合创建子模块,用于创建空的当前构造基元集合,然后初始化为包含模块1所得结果基元集合的外轮廓上的任意一个构造基元;
第一标记子模块,用于针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向1,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方向2,则标记构造基元的另一侧标记“已使用”;
第一最邻近构造基元定位子模块,用于从当前构造基元集合中的每个当前构造基元出发,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
第一当前构造基元集合更新子模块,用于清空当前构造基元集合,将第一最邻近构造基元定位子模块搜索得到的所有的最邻近构造基元存储下来,并作为新的当前构造基元集合,命令第一标记子模块再次进行标记,迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为结果基元集合的外轮廓;
结果基元集合搜索模块,用于搜索结果基元集合,包括以下子模块,
第二当前构造基元集合创建子模块,用于创建一个空的当前构造基元集合,然后初始化为包含一个起始构造基元;
第二标记子模块,用于针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向2,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方向1,则标记构造基元的另一侧标记“已使用”;
第二最邻近构造基元定位子模块,用于针对当前构造基元集合中每个当前构造基元,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元,此处的定位方式与第一最邻近构造基元定位子模块中的定位方式相反;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
第二当前构造基元集合更新子模块,用于清空当前构造基元集合,将第二最邻近构造基元定位子模块搜索得到的所有最邻近构造基元存储下来,并作为新的当前构造基元集合,命令第二标记子模块再次进行标记,迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为一个结果基元;
结果基元搜索判断子模块,用于命令第二当前构造基元集合创建子模块重新创建并初始化当前构造基元集合进行以上处理,直至所有的构造基元的两侧各被使用一次,此时所有的结果基元都搜索完毕。
***各模块的具体实现可参见上述方法,本发明不予赘述。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
Claims (8)
1.一种地理空间实体构建方法,其特征在于:将要构建的空间实体结果,称为结果基元;用于构造结果基元的初始给定基元,称为构造基元;设构造基元的维度为n,则由所有相关构造基元共同相接的、比构造基元仅仅低一个维度的基元,称为低维公共基元;以低维公共基元为中心,相接于该中心的所有构造基元形成的辐射状结构,称为构造基元束;执行以下步骤,
步骤1,搜索结果基元集合的外轮廓上的任意一个构造基元,包括以下子步骤,
步骤1.1,计算构造基元集合的最小外包络,获取最小外包络的极值;
步骤1.2,计算相接于以上极值的所有构造基元,从中选取位于最外侧的构造基元;
步骤1.3,对于以上位于最外侧的构造基元赋予方向,所述方向为1或2;
步骤2,搜索结果基元集合的外轮廓,包括以下子步骤,
步骤2.1,创建空的当前构造基元集合,然后初始化为包含步骤1所得结果基元集合的外轮廓上的任意一个构造基元;
步骤2.2,针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向1,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方向2,则标记构造基元的另一侧标记“已使用”;
步骤2.3,从当前构造基元集合中的每个当前构造基元出发,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
步骤2.4,清空当前构造基元集合,将步骤2.3搜索得到的所有的最邻近构造基元存储下来,并作为新的当前构造基元集合,返回步骤2.2迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为结果基元集合的外轮廓;
步骤3,搜索结果基元集合,包括以下子步骤,
步骤3.1,创建一个空的当前构造基元集合,然后初始化为包含一个起始构造基元;
步骤3.2,针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向2,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方 向1,则标记构造基元的另一侧标记“已使用”;
步骤3.3,针对当前构造基元集合中每个当前构造基元,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元,此处的定位方式与步骤2.3中的定位方式相反;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
步骤3.4,清空当前构造基元集合,将步骤3.3搜索得到的所有最邻近构造基元存储下来,并作为新的当前构造基元集合,返回步骤3.2迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为一个结果基元;
步骤3.5,返回步骤3.1,重新创建并初始化当前构造基元集合进行以上处理,直至所有的构造基元的两侧各被使用一次,此时所有的结果基元都搜索完毕。
2.根据权利要求1所述地理空间实体构建方法,其特征在于:设构造基元分为如下三类,
0-usedP,表示构造基元的一侧和另一侧都未被使用过;
1-usedP,表示即构造基元的一侧或另一侧已被使用过;
2-usedP,表示即构造基元的一侧和另一侧都已被使用过;
每次进入步骤3.1时,用于初始化空的当前构造基元集合所采用的起始构造基元记为beginP,beginP是0-usedP或1-usedP,beginP的方向如下设置,
如果beginP是0-usedP,则其方向是1或2;
如果beginP是1-usedP,并且beginP位于结果基元集合的外轮廓上,则选择beginP曾经用过的方向;
如果beginP是1-usedP,并且beginP不位于结果基元集合的外轮廓上,则选择beginP未曾用过的方向。
3.根据权利要求1或2所述地理空间实体构建方法,其特征在于:所述结果基元为2维,相应构造基元为1维;或者,所述结果基元为3维,相应构造基元为2维。
4.根据权利要求3所述地理空间实体构建方法,其特征在于:构造基元为1维的边时,设边的方向包括左向和右向,左向标记为方向1,右向标记为方向2;构造基元为1维的链时,设链的方向包括左向和右向,左向标记为方向1,右向标记为方向2,链的方向由包含在该链中的边的方向、链的节点与边的节点之间的步长决定如下,
计算链的起始节点至边的起始节点的步长,记为sz1;计算链的起始节点至边的终止节点的步长,记为sz2;比较sz1与sz2,如果sz1大于sz2,则链和边方向相反;如果sz1小于sz2,则链和边方向相同。
5.根据权利要求4所述地理空间实体构建方法,其特征在于:构造基元为1维的边/链时,
步骤2.3中,从当前构造基元集合中的每个当前构造基元出发,通过寻找极值夹角,定位到最邻近的构造基元,实现方式如下,
(i)若当前边/链的方向为1,且选择的是当前边/链的起始节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最大的那条边/链,该边/链是最邻近边/链;
(ii)若当前边/链的方向为1,且选择的是当前边/链的终止节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最小的那条边/链,该边/链是最邻近边/链;
(iii)若当前边/链的方向为2,且选择的是当前边/链的起始节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最小的那条边/链,该边/链是最邻近边/链;
(iv)若当前边/链的方向为2,且选择的是当前边/链的终止节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最大的那条边/链,该边/链是最邻近边/链;
步骤3.3中,从当前构造基元集合中的每个当前构造基元出发,通过寻找极值夹角,定位到最邻近的构造基元,实现方式如下,
(i)若当前边/链的方向为1,且选择的是当前边/链的起始节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最小的那条边/链,该边/链是最邻近边/链;
(ii)若当前边/链的方向为1,且选择的是当前边/链的终止节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最大的那条边/链,该边/链是最邻近边/链;
(iii)若当前边/链的方向为2,且选择的是当前边/链的起始节点,则在相接边/链束中,以该节点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最大的那条边/链,该边/链是最邻近边/链;
(iv)若当前边/链的方向为2,且选择的是当前边/链的终止节点,则在相接边/链束中,以该节 点为中心,从当前边/链出发,顺着逆时针望去,寻找与当前边/链夹角最小的那条边/链,该边/链是最邻近边/链。
6.根据权利要求3所述地理空间实体构建方法,其特征在于:构造基元为2维的平面片时,设平面片的方向包括前向和后向,后向标记为方向1,前向标记为方向2。
7.根据权利要求6所述地理空间实体构建方法,其特征在于:构造基元为2维的平面片时,
步骤2.3中,从当前构造基元集合中的每个当前构造基元出发,通过寻找极值夹角,定位到最邻近的构造基元,实现方式如下,
(i)若当前平面片的方向为1,则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最小的那个平面片,该平面片是最邻***面片;
(ii)若当前平面片的方向为2,则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最大的那个平面片,该平面片是最邻***面片;
步骤3.3中,从当前构造基元集合中的每个当前构造基元出发,通过寻找极值夹角,定位到最邻近的构造基元,实现方式如下,
(i)若当前平面片的方向为1,则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最大的那个平面片,该平面片是最邻***面片;
(ii)若当前平面片的方向为2,则在相接平面片束中,顺着当前平面片的正面望去,寻找与当前平面片沿着以上边夹角最小的那个平面片,该平面片是最邻***面片。
8.一种地理空间实体构建***,其特征在于:将要构建的空间实体结果,称为结果基元;用于构造结果基元的初始给定基元,称为构造基元;设构造基元的维度为n,则由所有相关构造基元共同相接的、比构造基元仅仅低一个维度的基元,称为低维公共基元;以低维公共基元为中心,相接于该中心的所有构造基元形成的辐射状结构,称为构造基元束;包括以下模块,
外轮廓构造基元搜索模块,用于搜索结果基元集合的外轮廓上的任意一个构造基元,包括以下子模块,
最小外包络极值获取子模块,用于计算构造基元集合的最小外包络,获取最小外包络的极值;最外侧构造基元选取子模块,用于计算相接于以上极值的所有构造基元,从中选取位于最外侧的构造基元;
最外侧构造基元方向赋予子模块,用于对于以上位于最外侧的构造基元赋予方向,所述方向为1或2;
结果基元集合外轮廓搜索模块,用于搜索结果基元集合的外轮廓,包括以下子模块,
第一当前构造基元集合创建子模块,用于创建空的当前构造基元集合,然后初始化为包含模块1所得结果基元集合的外轮廓上的任意一个构造基元;
第一标记子模块,用于针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向1,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方向2,则标记构造基元的另一侧标记“已使用”;
第一最邻近构造基元定位子模块,用于从当前构造基元集合中的每个当前构造基元出发,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
第一当前构造基元集合更新子模块,用于清空当前构造基元集合,将第一最邻近构造基元定位子模块搜索得到的所有的最邻近构造基元存储下来,并作为新的当前构造基元集合,命令第一标记子模块再次进行标记,迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为结果基元集合的外轮廓;
结果基元集合搜索模块,用于搜索结果基元集合,包括以下子模块,
第二当前构造基元集合创建子模块,用于创建一个空的当前构造基元集合,然后初始化为包含一个起始构造基元;
第二标记子模块,用于针对当前构造基元集合中的每个当前构造基元,根据其方向作标记,采用的标记方式为,若构造基元被赋予方向2,则标记构造基元的一侧标记“已使用”;若构造基元被赋予方向1,则标记构造基元的另一侧标记“已使用”;
第二最邻近构造基元定位子模块,用于针对当前构造基元集合中每个当前构造基元,分别执行以下处理,
通过寻找极值夹角,在当前构造基元的构造基元束中定位到最邻近的构造基元,此处的定位方式与第一最邻近构造基元定位子模块中的定位方式相反;
同时,针对定位到的每个最邻近构造基元,根据它与当前构造基元之间的相容性赋予方向,采用的赋予方式为,若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相反,则两者相容;若低维公共基元在当前构造基元和最邻近构造基元中扮演的角色相同,则两者不相容;
第二当前构造基元集合更新子模块,用于清空当前构造基元集合,将第二最邻近构造基元定位子模块搜索得到的所有最邻近构造基元存储下来,并作为新的当前构造基元集合,命令第二标记子模块再次进行标记,迭代搜索,直至得到的最邻近构造基元集合为空,此时,所有存储下来的最邻近构造基元为一个结果基元;
结果基元搜索判断子模块,用于命令第二当前构造基元集合创建子模块重新创建并初始化当前构造基元集合进行以上处理,直至所有的构造基元的两侧各被使用一次,此时所有的结果基元都搜索完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410309906.1A CN104090945B (zh) | 2014-06-30 | 2014-06-30 | 一种地理空间实体构建方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410309906.1A CN104090945B (zh) | 2014-06-30 | 2014-06-30 | 一种地理空间实体构建方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104090945A CN104090945A (zh) | 2014-10-08 |
CN104090945B true CN104090945B (zh) | 2015-03-25 |
Family
ID=51638661
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410309906.1A Expired - Fee Related CN104090945B (zh) | 2014-06-30 | 2014-06-30 | 一种地理空间实体构建方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104090945B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104809760B (zh) * | 2015-05-07 | 2016-03-30 | 武汉大学 | 基于深度优先策略的地理空间三维外轮廓自动构建方法 |
CN106846483B (zh) * | 2017-01-05 | 2018-03-06 | 深圳市数字城市工程研究中心 | 基于共享直线段的平面片束排序方法和*** |
CN109190255B (zh) * | 2018-09-05 | 2023-04-07 | 武汉大学 | 一种面向城市三维产权空间立体重构方法 |
CN114454178B (zh) * | 2022-03-15 | 2023-11-24 | 南京航空航天大学 | 面向异质整体制造的双机器人协同路径规划方法及*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411778A (zh) * | 2011-07-28 | 2012-04-11 | 武汉大学 | 一种机载激光点云与航空影像的自动配准方法 |
CN103870608A (zh) * | 2014-04-08 | 2014-06-18 | 武汉大学 | 一种基于地图图式的制图知识构建及形式化表达的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7595799B2 (en) * | 2005-08-04 | 2009-09-29 | Dassault Systemes | Process for creating from a mesh an isotopologic set of parameterized surfaces |
-
2014
- 2014-06-30 CN CN201410309906.1A patent/CN104090945B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411778A (zh) * | 2011-07-28 | 2012-04-11 | 武汉大学 | 一种机载激光点云与航空影像的自动配准方法 |
CN103870608A (zh) * | 2014-04-08 | 2014-06-18 | 武汉大学 | 一种基于地图图式的制图知识构建及形式化表达的方法 |
Non-Patent Citations (3)
Title |
---|
史云飞等.三维地籍产权体的语义限定与几何表达.《山东科技大学学报》.2013,第32卷(第3期),83-88. * |
贺彪等.顾及外拓扑的异构建筑三维拓扑重建.《武汉大学学报》.2011,第36卷(第5期),第579-583页. * |
郭仁忠等.三维地籍形态分析与数据表达.《中国土地科学》.2010,第24卷(第12期),45-51. * |
Also Published As
Publication number | Publication date |
---|---|
CN104090945A (zh) | 2014-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101944239B (zh) | 三维模型分割方法、装置以及包含该装置的图像处理*** | |
CN103703490B (zh) | 用于产生三维特征数据的设备以及用于产生三维特征数据的方法 | |
Ji et al. | A novel simplification method for 3D geometric point cloud based on the importance of point | |
CN107153723A (zh) | 一种三维数字园区的数据组织和管理方法及*** | |
CN110021072B (zh) | 面向全息测绘的多平台点云智能处理方法 | |
CN104835202A (zh) | 一种三维虚拟场景快速构建方法 | |
CN102663800A (zh) | 一种顾及城市意象的城市建筑综合与渲染的方法 | |
CN109118588B (zh) | 一种基于块分解的彩色lod模型自动生成方法 | |
CN104090945B (zh) | 一种地理空间实体构建方法及*** | |
CN110033519A (zh) | 基于隐式函数的三维建模方法、装置、***及存储介质 | |
Aljumaily et al. | Big-data approach for three-dimensional building extraction from aerial laser scanning | |
CN102737407A (zh) | 三角网格数据的拟合优化的方法及其*** | |
CN104715507A (zh) | 一种基于曲面片的三维地理实体自动构建方法 | |
JP2019168976A (ja) | 3次元モデル生成装置 | |
Zheng et al. | A morphologically preserved multi-resolution TIN surface modeling and visualization method for virtual globes | |
Zlatanova et al. | The role of DBMS in the new generation GIS architecture | |
Guo et al. | Line-based 3d building abstraction and polygonal surface reconstruction from images | |
CN105894553B (zh) | 一种基于格栅选择的街巷空间形态布局方法 | |
Qin et al. | Semantic 3D reconstruction using multi-view high-resolution satellite images based on U-Net and image-guided depth fusion | |
Song et al. | Challenges in building extraction from airborne LiDAR data: ground-truth, building boundaries, and evaluation metrics | |
Zhang et al. | A geometry and texture coupled flexible generalization of urban building models | |
Zhou | 3D urban modeling from city-scale aerial LiDAR data | |
Knott et al. | Towards mesh-based deep learning for semantic segmentation in photogrammetry | |
Namouchi et al. | Piecewise horizontal 3d roof reconstruction from aerial lidar | |
CN112948518B (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150325 Termination date: 20180630 |
|
CF01 | Termination of patent right due to non-payment of annual fee |