发明名称 一种基于曲面片的三维地理实体自动构建方法
摘要 本发明提供一种基于曲面片的三维地理实体自动构建方法,包括初次基于给定的平面片集合搜索曲面片,翻转曲面片中不相容平面片,再次基于给定的平面片集合搜索曲面片,得到合格的曲面片集合;然后搜索洞、各洞的所有曲线、搜索各曲线相应的曲线节点、搜索无穷远体的边界上的任意一个曲面片、搜索无穷远体的边界,最后得到最小体集合。本发明首次提供了基于曲面片的三维地理实体自动构建方法,填补了现有技术的空白。
申请公布号 CN104715507B 申请公布日期 2016.03.02
申请号 CN201510165391.7 申请日期 2015.04.09
申请人 武汉大学 发明人 虞昌彬;郭仁忠;李霖;贺彪;赵志刚
分类号 G06T17/05(2011.01)I 主分类号 G06T17/05(2011.01)I
代理机构 武汉科皓知识产权代理事务所(特殊普通合伙) 42222 代理人 严彦
主权项 一种基于曲面片的三维地理实体自动构建方法,其特征在于:基于以下定义,由所有的一致平面片构成的单连通分支,称为曲面片;洞是曲面片的边界;在洞中,具有相同隶属曲面片集合的所有边形成一个集合,称为曲线;曲线节点是曲线的边界;体由至少1个曲面片封闭而成;执行包括以下步骤,步骤1,初次基于给定的平面片集合搜索曲面片,搜索方式包括执行以下子步骤,步骤1.1,针对给定的平面片集合中的每个平面片,标记为“未使用”;步骤1.2,创建一个新的曲面片对象和当前平面片集合,内容分别为空;针对当前平面片集合进行初始化,包括随机选择给定的平面片集合中的1个平面片;步骤1.3,针对当前平面片集合中的每个平面片,将其加入步骤1.2中创建的新曲面片对象,并标记该平面片为“已使用”;步骤1.4,针对当前平面片集合,创建推进平面片集合;步骤1.5,针对当前平面片集合中的每个平面片的每条边,在给定的平面片集合中剩余未使用的平面片中计算该边的所有相接平面片,筛选出那些只有1个相接平面片的情况,并将这些唯一相接平面片加入推进平面片集合中;步骤1.6,清空当前平面片集合,将推进平面片集合作为新的当前平面片集合;之后,清空推进平面片集合;步骤1.7,返回步骤1.3,基于当前新的当前平面片集合,重复步骤1.3‑1.7,直至计算得到的推进平面片集合为空,进入步骤1.8;此时,以上曲面片的所有构造平面片都搜索完毕;步骤1.8,返回步骤1.2,基于重新初始化的当前平面片集合,重复步骤1.2‑1.8,直至平面片集合中每个平面片都被“已使用”;此时,所有曲面片的所有构造平面片都搜索完毕;步骤2,翻转曲面片中不相容平面片,包括对步骤1所得各曲面片分别进行以下操作,对当前操作的曲面片,从步骤1所得初步搜索的构造平面片集合中随机选择1个平面片作为标准平面片初始化当前平面片集合,计算标准平面片的所有边,去除边界边,剩余的作为前推进边集合;然后执行以下子步骤,步骤2.1,根据当前平面片集合(strip_facets)和当前推进边集合(strip_edges)寻找相接平面片集合(next_strip_facets);步骤2.2,计算下一批推进边集合(next_strip_edges),实现方式为,设相接平面片集合包含的所有边形成一个集合,称所有边集合(all_edges),从所有边集合中取出当前推进边集合(strip_edges)、公共边集合(common_edges)、边界边集合(boundary_edges),得到下一批推进边集合(next_strip_edges);步骤2.3,针对相接平面片集合(next_strip_facets)中的每一个平面片,从当前平面片集合(strip_facets)中取邻接的任意一个平面片,判断两者的相容性,若两者相容则不处理前者,若两者不相容则翻转前者;步骤2.4,清空当前平面片集合(strip_facets),把相接平面片集合(next_strip_facets)作为新的当前平面片集合;之后,清空相接平面片集合;步骤2.5,清空当前推进边集合(strip_edges),把下一批推进边集合(next_strip_edges)作为新的当前推进边集合;之后,清空下一批推进边集合;步骤2.6,返回步骤2.1,根据当前平面片集合(strip_facets)和当前推进边集合(strip_edges),重复步骤2.1‑2.6,直至计算得到的下一批推进边集合为空;步骤3,根据步骤2的翻转结果,再次基于给定的平面片集合搜索曲面片,得到曲面片集合,搜索过程方式与步骤1的搜索方式一致;步骤4,搜索洞,包括对步骤3所得每个曲面片分别执行以下子步骤,步骤4.1,针对曲面片的边缘边集合中的每条边缘边,标记其为“未使用”;步骤4.2,创建一个新的洞对象,内容为空;步骤4.3,创建当前边集合,初始化为边缘边集合中的任意一条“未使用”的边缘边;步骤4.4,针对当前边集合中的每条当前边,将其加入以上步骤4.2建立的洞对象,并将该边标记为“已使用”;针对当前边集合,创建对应的邻接边集合,初始化内容为空;步骤4.5,针对当前边集合中的每条当前边,寻找其邻接边如下,针对每条当前边的起始节点,寻找所有相接边,如果存在包含于曲面片的边缘边集合的相接边,将其加入邻接边集合;针对每条当前边的终止节点,寻找所有相接边,如果存在包含于曲面片的边缘边集合的相接边,将其加入邻接边集合;步骤4.6,清空当前边集合,将邻接边集合作为新的当前边集合;之后,清空邻接边集合;步骤4.7,返回步骤4.4,基于新的当前边集合,重复步骤4.4‑步骤4.7,直至寻找得到的邻接边集合为空,进入步骤4.8;此时,以上洞中所有边都搜索完毕,得到当前洞的构造边集合;步骤4.8,返回步骤4.2,重复步骤4.2‑4.8,创建新的洞对象并进行搜索,直至以上曲面片的边缘边集合中每条边缘边都“已使用”;此时,以上曲面片中所有洞都搜索完毕,形成该曲面片的构造洞集合;步骤5,搜索曲面片集合包含的各洞的所有曲线;步骤6,搜索各曲线相应的曲线节点;步骤7,搜索无穷远体的边界上的任意一个曲面片,通过基于步骤3所得曲面片集合寻找外轮廓体的边界上任意一个曲面片实行,包括以下子步骤,步骤7.1,创建一个结果曲面片,其内容为空;步骤7.2,创建一个结果平面片,其内容为空;步骤7.3,计算给定平面片集合的最小外接盒;计算该最小外接盒的最大Z值,简称最大Z值;步骤7.4,创建一个相接平面片集合,其内容为空;步骤7.5,针对给定平面片集合中的每个平面片的每个顶点,比较该顶点的Z值与最大Z值:若相等,则将该平面片加入以上相接平面片集合中;否则,不做任何处理;步骤7.6,针对以上相接平面片集合,如果存在所有顶点Z值都等于最大Z值的平面片,将该平面片标记为平行平面片,并转入步骤7.7;如果不存在,则转入步骤7.8;步骤7.7,比较平行平面片的法向量与三维矢量(0,0,1)的夹角大小,并在以下处理后转入步骤7.10;若两者夹角为0,则将该平面片标记为结果平面片,且结果平面片的方向为1;若两者夹角为180,则将该平面片标记为结果平面片,且结果平面片的方向为2;步骤7.8,针对相接平面片集合中的每个平面片,计算法向量与三维矢量(0,0,1)的夹角,该夹角记为“原始夹角”;比较该原始夹角与90并如下处理,若原始夹角处于(0,90),则不进行操作;若原始夹角处于(90,180),则将180减去原始夹角;将处理后的夹角标记为“处理夹角”,并进入步骤7.9;步骤7.9,针对相接平面片集合中的每个平面片,选择其“处理夹角”最小的平面片并标记为结果平面片;同时,根据结果平面片的“原始夹角”计算结果平面片的方向如下,若原始夹角处于(0,90),则结果平面片的方向记为1;若原始夹角处于(90,180),则结果平面片的方向为2;步骤7.10,找到结果平面片所在的曲面片,该曲面片为结果曲面片;同时,将结果平面片的方向作为结果曲面片的方向;步骤7.11,所得结果曲面片为外轮廓体边界上的一个曲面片,返回结果曲面片;步骤8,搜索无穷远体的边界,通过基于步骤3所得曲面片集合搜索外轮廓体实行,包括以下子步骤,步骤8.1,采用步骤7所得边界上的任意一个曲面片,记为外轮廓任意曲面片;步骤8.2,创建外轮廓体对象和当前曲面片集合,内容分别为空,初始化当前曲面片集合包括之前所得的外轮廓任意曲面片;步骤8.3,针对当前曲面片集合中的每个曲面片,分别读取此时曲面片的方向,将曲面片以及此时曲面片的方向加入外轮廓体对象中,同时对曲面片此时方向对应的侧面作标记如下,若此时曲面片的方向为1,表明搜索前向无穷远体,则该曲面片的背面标记为”已使用”;若此时曲面片的方向为2,表明搜索后向无穷远体,则该曲面片的正面标记为”已使用”;步骤8.4,针对当前曲面片集合,创建对应的推进曲面片集合,其初始化内容为空;步骤8.5,针对当前曲面片集合中的每个曲面片的每条曲线,分别计算最邻近曲面片和相应方向步骤8.6,针对以上得到的每个最邻近曲面片及相应方向,若在步骤8.2创建的外轮廓体对象外轮廓体中不存在,则加入以上推进曲面片集合;若存在则不做处理;步骤8.7,清空当前曲面片集合,将推进曲面片集合作为新的当前曲面片集合;之后,清空推进曲面片集合;步骤8.8,返回步骤8.3,基于新的当前曲面片集合重复步骤8.3‑8.8,直至得到的推进曲面片集合为空;此时,以上无穷远体的边界搜索完毕;步骤9,针对步骤3所得曲面片集合搜索最小体集合,包括以下子步骤,步骤9.1,针对曲面片集合中每个曲面片,对其正面和背面都标记”未使用”;步骤9.2,根据步骤8所得无穷远体的边界更新相应曲面片的标记,边界上的每一个曲面片,有一侧”已使用”;步骤9.3,创建一个新的最小体对象和当前曲面片集合,其内容分别为空,初始化当前曲面片集合;步骤9.4,针对当前曲面片集合中的每个曲面片,读取此时曲面片的方向,并将该曲面片以及此时曲面片的方向加入以上最小体中,同时将该曲面片此时方向对应的侧面作标记如下,若此时曲面片的方向为1,表明搜索后向体,则该曲面片的正面标记为”已使用”;若此时曲面片的方向为2,表明搜索前向体,则该曲面片的背面标记为”已使用”;步骤9.5,针对当前曲面片集合,创建推进曲面片集合,其内容为空;步骤9.6,针对当前曲面片集合中的每个曲面片的每条构造曲线,计算最邻近曲面片及相应方向;步骤9.7,对于以上得到的每个最邻近曲面片及相应方向,若在步骤9.3创建的新的最小体对象中不存在,则加入以上推进曲面片集合;若存在则不做处理;步骤9.8,清空当前曲面片集合,将推进曲面片集合作为新的当前曲面片集合;之后,清空推进曲面片集合;步骤9.9,返回步骤9.4,基于新的当前曲面片集合重复步骤9.4‑步骤9.9,直至计算得到的推进曲面片集合为空;此时,以上最小体的所有构造曲面片都搜索完毕,进入步骤9.10;步骤9.10,返回步骤9.3,创建一个新的最小体对象,重复步骤9.3‑步骤9.10,直至给定曲面片集合中的每个曲面片都被“已使用”2次;此时,所有最小体都搜索完毕。
地址 430072 湖北省武汉市武昌区珞珈山武汉大学