CN106296824B - 一种基于半边数据结构的T-mesh局部细化实现方法 - Google Patents
一种基于半边数据结构的T-mesh局部细化实现方法 Download PDFInfo
- Publication number
- CN106296824B CN106296824B CN201610685293.0A CN201610685293A CN106296824B CN 106296824 B CN106296824 B CN 106296824B CN 201610685293 A CN201610685293 A CN 201610685293A CN 106296824 B CN106296824 B CN 106296824B
- Authority
- CN
- China
- Prior art keywords
- dough sheet
- mesh
- splines
- cutting
- vertex
- 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/30—Polynomial surface description
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Algebra (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Control Of Cutting Processes (AREA)
- Image Generation (AREA)
Abstract
本发明提供一种基于半边数据结构的T‑mesh局部细化实现方法,步骤如下:一、构建当前T‑splines的基于半边数据结构的T‑mesh;二、确定当前T‑mesh中所有需要进行局部细化的面片;三、在需要局部细化的面片中增加新边点,并标记与该面片切分有关的点;四、确定切分后的面片及未切分的面片各自所包含的顶点;五、重建经过局部细化后的基于半边数据结构的T‑mesh;本发明实现了T‑splines的T‑mesh的自适应局部细化,在三角网格曲面拟合以及基于T‑splines的等几何分析等实际应用中不可或缺,有利于推动T‑splines在计算机辅助设计以及计算机辅助分析等领域的进一步应用。
Description
技术领域
本发明提供了一种基于半边数据结构的T网格(T-mesh)局部细化实现方法,它涉及T样条曲面(T-splines)的T-mesh局部细化实现方法,具体涉及双奇数次T-splines在拟合拓扑上等价于一个圆盘的三角网格曲面时,T-splines的T-mesh局部细化实现方法。本发明所指的T样条曲面(即T-splines)是2003年Thomas W.Sederberg等人在文献T-splinesand T-NURCCs中提出的一种曲面造型方法。此外,本发明所指的T-mesh即指由T-splines控制顶点组成的T-splines控制网格,又指由T-splines参数域上的节点所组成的参数域网格,以上两者是拓扑同构的。属于计算机图形学和曲面造型技术领域。
背景技术
非均匀有理B样条曲面(Non-Uniform Rational B-splines,NURBS)由于其优良的特性而被包含在初始化图形交换规范(The initial Graphic Exchange Specification,IGES)和工业产品数据交换标准(Standard for The Exchange of Product model data,STEP)等标准之中,在工业界得到了广泛的应用,但NURBS曲面仍然存在以下不足。
首先,单张NURBS曲面只能表示拓扑结构上等价于一张平面或者一张圆柱面的曲面,不能表示任意拓扑结构的曲面。其次,NURBS曲面在进行局部细化时,为了保证其控制顶点的矩形拓扑结构,往往需要在添加一整行以及一整列的控制顶点,而这些新增的顶点大部分是冗余的。
2003年,Thomas W.Sederberg等人提出了T-splines,为解决NURBS的不足提供了契机。参见Sederberg T W,Zheng J,Bakenov A,et al.T-splines and T-NURCCs[C].ACM,2003,22(3):477-484。相比较于NURBS曲面,T样条允许控制顶点呈T型连接。这使得T样条具有以下几个显著的优点:(1)样条曲面的无缝拼接。(2)局部细化。T-splines由于允许控制顶点呈T型连接方式,因此,T-splines在进行局部加密时不需要像NURBS一样添加一整行以及一整列的控制顶点,只需要插入少数几个控制顶点,并引入T型连接方式,从而实现真正的局部细化。
T-splines具有局部细化功能,因此T-splines在曲面拟合时可以依据拟合误差对T-splines进行自适应局部细化,最终得到满足一定误差要求的T-splines曲面。T-splines的这个特性使得其在曲面拟合领域有着较好的应用前景。有关学者已对T-splines拟合拓扑上等价于一个圆盘的三角网格曲面进行了研究,给出了包含下述几个步骤T-splines拟合方法。
步骤一将拓扑上等价于一个圆盘的三角网格曲面映射到单位正方形参数域上,这个单位正方形参数域不仅是三角网格曲面的参数域,同时也是T-splines的参数域。
步骤二依据某种拟合准则反算出T-splines参数域上的节点所对应的控制顶点的空间坐标值。
步骤三由反算出的控制顶点空间坐标值以及与控制顶点所相关的节点矢量确定当前T-splines与三角网格曲面的误差。
步骤四依据步骤三中计算的误差,确定由T-splines参数域所构成的T-mesh中需要进行局部细化的区域,并对这些区域进行局部细化。从而得到控制顶点更多,曲面自由度更大的T-splines。
步骤五重复步骤二、步骤三以及步骤四最终得到满足拟合误差要求的T-splines。参见Wang Y,Zheng J.Curvature-guided adaptive T-spline surface fitting[J].Computer-Aided Design,2013,45(8):1095-1107.
以上五个步骤中,步骤四是最为关键的一个步骤,它直接影响T-splines的计算效率以及T-splines的T-mesh。目前针对步骤四主要有以下两种T-mesh局部细化实现方法。
1、基于四叉树的T-mesh生成方法。这种方法的主要思想是将拟合误差较大的区域通过四叉树的方法分成较小的四个区域,从而得到控制顶点更多,自由度更大的T-mesh。参见彭小新.T-样条曲面重建算法与应用[D].南京航空航天大学,2009。但四叉树方法存在着以下不足之处。(1)T-splines采用四叉树方法进行局部自适应细化后,未细化之前的T-Mesh依旧存在于内存中,并且这类冗余数据随着T-splines自适应细化的进行而逐渐增多。(2)基于四叉树的T-splines难以计算控制顶点所对应的基函数,这降低了T-splines计算效率。
2、基于T-splines基函数分裂的T-mesh生成方法。这种方法通过T-splines基函数分裂而得到控制顶点更多的T-mesh。这种方法存在大量的T-splines控制顶点与基函数的对应检测,算法比较复杂。参见Sederberg T W,Cardon D L,Finnigan G T,et al.T-spline simplification and local refinement[C].ACM,2004,23(3):276-283。
半边数据结构是另外一种常用的适合于T-splines的底层数据结构。原因有如下几点:(1)半边数据结构可以很好的呈现T-mesh中的点、边以及面片之间的拓扑关系。(2)半边数据结构在邻域搜索方面效率较高,因此基于半边数据结构的T-splines在计算控制顶点对应的基函数时具有较高的效率。(3)半边数据结构可以通过增加“边点”和“面点”等辅助信息,降低T-mesh的局部细化算法复杂度。
由于半边数据结构有上述几个优点,因此半边数据结构相比较于四叉树更适合作为T-splines的底层数据结构。为了进一步提高基于半边数据结构的T-splines在曲面造型方面的优势,有必要研究基于半边数据结构T-Splines的T-mesh局部细化实现方法。
发明内容
合理的T-splines底层数据结构以及T-mesh局部细化实现方法可提高T-splines的计算效率并减少T-splines的数据量。本发明的目的是提供一种基于半边数据结构的T-mesh局部细化实现方法。该方法充分发挥了半边数据结构的优势,可以快速将现有的T-mesh中需要细化的面片一分为二,从而得到控制顶点更多,自由度更大的T-splines。该方法可有效解决使用双奇次T-splines拟合拓扑结构等价于一个圆盘的三角网格曲面中T-mesh的局部细化问题。
本发明一种基于半边数据结构的T-mesh局部细化实现方法,包括如下步骤:
步骤一、依据当前T-splines控制顶点的连接方式构建当前T-splines的基于半边数据结构的T-mesh;
步骤二、确定当前T-mesh中所有需要进行局部细化的面片;
步骤三、在需要局部细化的面片中增加新边点,并标记与该面片切分有关的点;
步骤四、依据与面片切分有关的点将当前T-mesh中需要切分的面片一分为二,并确定切分后的面片及未切分的面片各自所包含的顶点;
步骤五、依据切分后的面片及未切分的面片各自所包含的顶点信息重建经过局部细化后的基于半边数据结构的T-mesh。
其中,本发明中所提到的T-splines,如果没有特殊说明,均为双奇次T-splines。
其中,如步骤一中所述的“依据当前T-splines控制顶点的连接方式构建当前T-splines的基于半边数据结构的T-mesh”的具体实现步骤如下:
(1.1)将T-splines的控制顶点进行编号;
(1.2)将T-splines中的面片进行编号,并按照逆时针方向依次记录每个小面片中所包含的控制顶点序号;
(1.3)对T-splines中的面片进行遍历,依据每个面片中所包含的顶点信息建立与该面片相关的所有半边;
(1.4)确定每条半边的前一条半边与后一条半边。
其中,步骤一中提到的“T-splines的控制顶点”除了包含其的笛卡尔空间坐标信息以及权值外,还应包括该控制顶点所对应的T-splines参数域上锚点坐标信息。由于在双奇次T-splines中,T-splines的控制顶点所对应的锚点就是T-splines参数域上的某个节点,因此由T-splines的控制顶点所组成的面片也相应的对应于T-splines参数域上的某个区域。
其中,如步骤二中所述的“确定当前T-mesh中所有需要进行局部细化的面片”的具体实现步骤如下:
(2.1)由T-splines的控制顶点与参数域上节点的对应关系确定由T-splines的控制顶点所组成的面片所对应的局部参数域;
(2.2)确定与该局部参数域有关的三角网格顶点;
(2.3)使用步骤(2.2)中所确定的与该局部参数域有关的三角网格顶点的参数坐标计算相应的T-splines上的点的笛卡尔坐标;
(2.4)计算具有相同参数坐标点的三角网格顶点以及T-splines顶点的笛卡尔坐标之间的误差,如果误差满足给定的阈值,则该面片不需要局部细分,否则需要局部细化。
其中,如步骤三中所述的“在需要局部细化的面片中增加新边点,并标记与该面片切分有关的点”的具体步骤如下:
(3.1)对于T-mesh中需要局部细化的面片,依据该面片所对应的矩形参数域的u向和v向的宽度大小,如果矩形参数域的u向比v向宽,则u向的两条边则标记为需要切分的两条边,否则v向的两条边则标记为需要切分的两条边;
(3.2)分别统计需要切分的两条矩形参数域边上的顶点个数,如果这些边上的顶点个数为两个,则增加一个新边点,新边点的位置为该边的中点位置,并将新边点标记为与面切分有关的点。如果这些边上的顶点个数大于两个,则找到位置为该边中点的顶点,并标记为与面切分有关的点。
其中,如步骤四中所述的“依据与面片切分有关的点将当前T-mesh中需要切分的面片一分为二,并确定切分后的面片及未切分的面片各自所包含的顶点”的具体实现步骤如下:
(4.1)判断当前面片是否需要切分。如果当前面片不需要切分,则执行步骤(4.2)~(4.3);如果当前面片需要切分,则执行步骤(4.4)~(4.9);
(4.2)如果当前面片不需要切分,则新建一个面片,并确定该面片所包含的所有顶点;
(4.3)判断T-mesh中的所有面片是否已经完全遍历,如果没有完全遍历,则获取T-mesh中当前面片的下一个面片,之后执行步骤(4.1);如果T-mesh中的所有面片已完全遍历,则步骤四执行完毕;
(4.4)如果当前面片需要切分,则遍历与该面片相关的所有半边,并找到标记为与当前面片切分有关的两个点P点和Q点;
(4.5)新建一个面片,并将与当前面片以及P点有关的半边作为起始半边,将当前面片以及Q点有关的半边作为终止半边;
(4.6)逆时针顺序遍历步骤(4.5)中所确定的起始半边与终止半边之间的所有半边,并确定该新建面片所包含的所有顶点;
(4.7)再次新建一个面片,并将与当前面片以及Q点有关半边作为起始半边,将与当前面片以及P点有关的半边作为终止半边;
(4.8)逆时针依此遍历步骤(4.7)中所确定的起始半边与终止半边之间的所有半边,并确定该新建面片所包含的所有顶点;
(4.9)判断T-mesh中的所有面片是否已经完全遍历,如果没有完全遍历,则获取T-mesh中当前面片的下一个面片,之后执行步骤(4.1);如果T-mesh中的所有面片已完全遍历,则步骤四执行完毕。
其中,如步骤五中所述的“依据切分后的面片及未切分的面片各自所包含的顶点信息重建经过局部细化后的基于半边数据结构的T-mesh”的具体步骤如下:
(5.1)对经过局部细化后T-mesh中的所有面片进行遍历,并依据每个面片中所包含的顶点信息建立与该面片相关的所有半边;
(5.2)确定每条半边的前一条半边与后一条半边。
通过上述步骤实现了T-splines的T-mesh的自适应局部细化,这是T-splines的一项关键技术,在三角网格曲面拟合以及基于T-splines的等几何分析等实际应用中不可或缺。因此本发明提出T-splines的T-mesh的局部细化算法有利于推动T-splines在计算机辅助设计以及计算机辅助分析等领域的进一步应用。
本发明一种基于半边数据结构的T-mesh局部细化实现方法有如下三个优点:
(1)经过局部细化后新生成的T-mesh与细化之前的T-mesh完全独立,因此细化之前的T-mesh相关数据在局部细化完成之后可以删除,不存在冗余数据。
(2)相比较于四叉树每次将需要局部细化的面片一分为四,基于半边数据结构的T-mesh局部细化实现方法每次仅将需要局部细化的面片一分为二,有效的降低了T-splines的控制顶点以及由控制顶点组成的面片在局部细化中增长速度。
(3)经过局部细化后的T-mesh依旧以半边数据结构进行重建,因此可以再次进行局部细化,这也使得经过细化后T-splines依旧具有较高的计算效率。
附图说明:
图1为本发明所述方法流程图。
图2为拓扑上等价于一个圆盘的三角网格曲面及其参数化示意图,其中图2a为一个拓扑上等价于一个圆盘的三角网格模型,图2b为图2a中的三角网格模型所对应的参数化网格。
图3a为半边数据结构在计算机中的存储示意图。
图3b为将网格模型中的一条边分成两条半边的示意图。
图4为T-splines的控制顶点与参数域上的节点(锚点)对应关系图。
图5为某T-splines的参数域示意图。
图6为在T-mesh中需要局部细化的面片中增加新边点后的示意图。
图7为T-mesh经过局部细化后新生成的T-mesh示意图。
图中序号、符号、代号说明如下:
图3a中的前驱与后继是指计算机学科中单向链表的前驱与后继。在一个单向线性链表中,前驱是指在当前数据之前的前一个数据,后继是指当前数据的后一个数据。
图3b中的序号1、2分别是指上下两个矩形,1是指图2中在上方的矩形,2是指图2中在下方的矩形。
图3b中的两个空心圆圈代表上下两矩形的公共边上的两个顶点,两条带箭头的边分别代表与该实际边相关的两条半边。
图3b中与半边相连的顶点从属与该半边。即左边的顶点从属于箭头指向向右的半边,右边的顶点从属于箭头指向向左的半边。
图4中的序号1~23分别为T-splines的23个控制顶点编号。序号1对应T-splines的第一个控制顶点,序号2对应T-splines的第二个控制顶点,依此类推。
图4中的序号a1~a23具有双重含义。它们既为T-splines参数域23个节点编号,又是T-splines的23个控制顶点所对应的参数域上的锚点编号。其中序号为1的控制顶点对应锚点a1,序号为2的控制顶点对应锚点a2,依此类推。
图4中的箭头为控制顶点与锚点对应关系的表达方式,其中7号控制顶点对应a7号锚点,12号控制顶点对应a12号锚点。
图5中的序号v1~v17为T-splines参数域上17个节点的编号。
图5中的序号f1~f5为T-splines参数域上5个面片的编号。
图5中的符号u和v分别代指参数域坐标的u方向和v方向。
图6中的序号v1~v24为经过局部细化后的T-splines参数域上24个节点的编号。
图6中的序号f1~f6为T-splines参数域上5个面片的编号。
图6中的符号u和v分别代指参数域坐标的u方向和v方向。
图7中的序号v1~v24为经过局部细化后的T-splines参数域上24个节点的编号。
图7中的序号s1~s11为经过局部细化后的T-splines参数域上11个面片的编号。
图7中的符号u和v分别代指参数域坐标的u方向和v方向。
具体实施方式
为使本发明的技术方案更加明确,下面结合附图以及具体例子对本发明作进一步说明。
本发明一种基于半边数据结构的T-mesh局部细化实现方法,如图1所示,其实施步骤如下:
步骤一首先依据当前T-splines控制顶点的连接方式构建当前T-splines的基于半边数据结构的T-mesh。
步骤二确定当前T-mesh中所有需要进行局部细化的面片。
步骤三在需要局部细化的面片中增加新边点,并标记与该面片切分有关的点。
步骤四依据与面片切分有关的点将当前T-mesh中需要切分的面片一分为二,并确定切分后的面片及未切分的面片各自所包含的顶点。
步骤五依据切分后的面片及未切分的面片各自所包含的顶点信息重建经过局部细化后的基于半边数据结构的T-mesh。
如图2所示,图2a为拓扑上等价于一个圆盘的三角网格模型,图2b为图2a的三角网格模型经过参数化后得到参数化网格模型,图2a中的三角网格模型与图2b中的参数化网格模型在顶点上存在一一对应关系。
半边数据结构的核心思想是将一条边看成两条方向相反的半边。一条边上的两个顶点分别属于不同的半边,这两条半边互为对方的相反半边。如图3b所示,左边的顶点从属于箭头指向向右的半边,右边的顶点从属于箭头指向向左的半边。这两条半边分别属于不同的面片,箭头指向向右的半边属于面片1,箭头指向向左的半边属于面片2,并且这两条半边互为相反半边。
如图4所示,T-splines的控制顶点与T-splines参数域上的节点一一对应,且节点之间的连接关系与控制顶点之间的连接关系在拓扑上完全等价。因此,T-splines参数域上节点之间的拓扑连接方式就是T-splines控制顶点的连接方式。所以,T-splines的参数域可作为该T-splines的T-mesh。
T-splines控制顶点与其参数域的节点之间的对应关系决定了由T-splines的控制顶点所组成的面片与T-splines参数域某个矩形区域之间的对应关系。如图4所示,由控制顶点14、13、12、17以及18组成的面片对应于参数域a14、a13、a12、a17以及a18所确定的矩形区域。
在使用T-splines拟合拓扑上等价于一个圆盘的三角网格曲面时,可以将T-splines以及三角网格曲面的参数域均设定为单位面积的正方形。在此前提条件下,步骤二确定当前T-mesh中所有需要进行局部细化的面片的具体实现步骤如下:
(2.1)由T-splines的控制顶点与参数域上节点的对应关系确定由T-splines的控制顶点所组成的面片所对应的矩形参数域。
(2.2)确定与该矩形参数域有关的三角网格顶点。
(2.3)使用步骤(2.2)中所确定的与该矩形参数域有关的三角网格顶点的参数坐标计算相应的T-splines上的笛卡尔坐标。
(2.4)计算具有相同参数坐标点的三角网格顶点以及T-splines顶点的笛卡尔坐标之间误差,如果误差满足给定的阈值,则该面片不需要局部细分,否则需要局部细化。
确定T-mesh中需要局部细化的面片后,接着就是实现T-mesh的局部细化。下面结合图5、图6以及图7对T-mesh的局部细化实现方法进行详细说明。
如图5所示,假设当前T-mesh中需要进行局部细化的面片为f1~f5,与局部细化有关的节点为v1~v17。则步骤三在需要局部细化的面片中增加新边点,并标记与该面片切分有关的点的具体实现方法如下。
(3.1)分别比较矩形面片f1~f5的u宽和v宽大小。由于面片f1、f4以及f5的u宽大于v宽,而面片f2以及f3的u宽和v宽相等。因此,面片f1、f4以及f5应该沿着u向进行切分,而面片f2以及f3应该沿着v向进行切分。所以,与面片f1切分有关的参数域矩形边为v2v3和v4v1;与面片f4切分有关的参数域矩形边为v4v11和v16v17;与面片f5切分有关的参数域矩形边为v11v13和v14v16;与面片f2切分有关的参数域矩形边为v4v9和v10v11;与面片f3切分有关的参数域矩形边为v11v10和v12v13。
(3.2)由于参数域矩形边v2v3、v10v11、v12v13、v4v11、v16v17、v11v13和v14v16均只包含两个节点。因此,上述提到的边都需要增加一个新边点。如图6所示,参数域矩形边v2v3在中点处增加了新边点v18,参数域矩形边v10v11在中点处增加了新边点v19。此外,这些新增的新边点都标记为与面片切分有关的点,因此半边v2v3上新增的新边点v18就应标记为与面片f1切分有关的点。而参数域矩形边v4v1和v4v9均包含有三个顶点,因此只需要确定参数域矩形边v4v1的中点v5以及参数域矩形边v4v9的中点v3。接着将v5标记为与面片f1切分有关的点,v3标记为与面片f2切分有关的点即可。
当确定所有与面片切分相关的节点后,接着就要将这些需要切分的面片一分为二。下面结合图6和图7对面片切分过程进行详细说明。
步骤四依据与面片切分有关的点将当前T-mesh中需要切分的面片一分为二,并确定切分后的面片及未切分的面片各自所包含的顶点的具体实施方案如下。
(4.1)依据当前面片是否需要切分选择不同的处理方案。比如面片f1~f5需要进行切分,因此面片f1~f5执行步骤(4.4)~(4.9),而面片f6不需要进行切分,因此面片f6执行步骤(4.2)~(4.3)。
(4.2)如果当前面片不需要切分,则新建一个面片,并确定该面片所包含的所有顶点。由于面片f6不需要进行切分,因此新建面片s11,接着将面片s11有关的节点v2、v6、v9、v3以及v18分别加入到新建面片s11中顶点信息中。
(4.3)判断T-mesh中的所有面片是否已经完全遍历。如果没有完全遍历,则获取T-mesh中当前面片的下一个面片,接着执行步骤(4.1)。如果T-mesh中的所有面片已完全遍历,则步骤四执行完毕。处理完面片f6后,接着判断当前T-mesh中的所有面片是否已经完全遍历,如果没有则处理T-mesh中在面片f6之后的下一个面片,否则步骤四执行完毕。
(4.4)如果当前面片需要切分,则遍历与该面片相关的所有半边,并找到标记为与当前面片切分有关的两个点P点和Q点。由于面片f2需要切分,因此找到与面片f2切分有关的两个节点v3和v19。
(4.5)新建一个面片,并将与当前面片以及P点有关的半边作为起始半边,将当前面片以及Q点有关的半边作为终止半边。如图6以及图7所示,新建面片s4,并将与当前面片f2和节点v3有关的半边v3v9(以v3为起点v9为终点)作为起始半边,将与当前面片f2和节点v19有关的半边v10v11作为终止半边。
(4.6)逆时针顺序遍历步骤(4.5)中所确定的起始半边与终止半边之间的所有半边,并确定该新建面所包含的所有顶点。如图6所示,逆时针顺序遍历半边v3v9、v9v10以及v10v11,将节点v3、v9、v10以及v19依次加入到在步骤(4.5)中所新建的面片s4中。
(4.7)再次新建一个面片,并将与当前面片以及Q点有关的半边作为起始半边,将与当前面片和P点有关的半边作为终止半边。如图6以及图7所示,新建面片s3,并将与当前面片f2和节点v19有关的半边v10v11作为起始半边,将与当前面片f2和节点v3有关的半边v4v3作为终止半边。
(4.8)逆时针依此遍历步骤(4.7)中所确定的起始半边与终止半边之间的所有半边,并确定该新建面片所包含的所有顶点。如图6所示,逆时针顺序遍历半边v10v11、v11v4以及v4v3,将节点v19、v11、v23、v4以及v3依次加入在步骤(4.7)所新建的面片s3中。
(4.9)判断T-mesh中的所有面片是否已经完全遍历。如果没有完全遍历,则获取T-mesh中当前面片的下一个面片,之后执行步骤(4.1)。如果T-mesh中的所有面片已完全遍历,则步骤四执行完毕。处理完面片f2后,接着判断当前T-mesh中的所有面片是否已经完全遍历,如果没有则处理T-mesh中在面片f6之后的下一个面片,否则步骤四执行完毕。
步骤五依据切分后的面片及未切分的面片各自所包含的顶点信息重建经过局部细化后的基于半边数据结构的T-mesh具体实施方案如下。
(5.1)对经过局部细化后T-mesh中的所有面片进行遍历,并依据每个面片中所包含的顶点信息建立与该面片相关的所有半边。如图7所示,与面片s3相关的顶点的依次为v3、v19、v11、v23以及v4。由与面片s3相关的这些顶点信息新建v3v19、v19v11、v11v23、v23v4以及v4v3五条与面片s3相关的半边。
(5.2)确定每条半边的前一条半边与后一条半边。如图7所示,面片s3中半边v3v19的后一条半边为v19v11,其前一条半边为v4v3。
尽管上面对本发明说明性的实施方案进行了描述,以便于本领域的技术人员理解本发明,但本发明并不仅限于具体的实施方法。对于本发明所涉及的相关技术领域的技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神范围内,本发明均予以保护。
Claims (6)
1.一种基于半边数据结构的T-mesh局部细化实现方法,其特征在于:它包括如下步骤:
步骤一、依据当前T-splines控制顶点的连接方式构建当前T-splines的基于半边数据结构的T-mesh;
步骤二、确定当前T-mesh中所有需要进行局部细化的面片;
步骤三、在需要局部细化的面片中增加新边点,并标记与该面片切分有关的点;
步骤四、依据与面片切分有关的点将当前T-mesh中需要切分的面片一分为二,并确定切分后的面片及未切分的面片各自所包含的顶点;
步骤五、依据切分后的面片及未切分的面片各自所包含的顶点信息重建经过局部细化后的基于半边数据结构的T-mesh;
其中,步骤三中所述的“在需要局部细化的面片中增加新边点,并标记与该面片切分有关的点”,其具体步骤如下:
(3.1)对于T-mesh中需要局部细化的面片,依据该面片所对应的矩形参数域的u向和v向的宽度大小,如果矩形参数域的u向比v向宽,则u向的两条边则标记为需要切分的两条边,否则v向的两条边则标记为需要切分的两条边;
(3.2)分别统计需要切分的两条矩形参数域边上的顶点个数,如果这些边上的顶点个数为两个,则增加一个新边点,新边点的位置为该边的中点位置,并将新边点标记为与面切分有关的点;如果这些边上的顶点个数大于两个,则找到位置为该边中点的顶点,并标记为与面切分有关的点。
2.根据权利要求1所述的一种基于半边数据结构的T-mesh局部细化实现方法,其特征在于:在步骤一中所述的“依据当前T-splines控制顶点的连接方式构建当前T-splines的基于半边数据结构的T-mesh”,其具体实现步骤如下:
(1.1)将T-splines的控制顶点进行编号;
(1.2)将T-splines中的面片进行编号,并按照逆时针方向依次记录每个小面片中所包含的控制顶点序号;
(1.3)对T-splines中的面片进行遍历,依据每个面片中所包含的顶点信息建立与该面片相关的所有半边;
(1.4)确定每条半边的前一条半边与后一条半边。
3.根据权利要求1所述的一种基于半边数据结构的T-mesh局部细化实现方法,其特征在于:在步骤一中提到的“T-splines的控制顶点”,除了包含其笛卡尔空间坐标信息以及权值外,还应包括该控制顶点所对应的T-splines参数域上锚点坐标信息;由于在双奇次T-splines中,T-splines的控制顶点所对应的锚点就是T-splines参数域上的某个节点,因此由T-splines的控制顶点所组成的面片也相应的对应于T-splines参数域上的预定区域。
4.根据权利要求1所述的一种基于半边数据结构的T-mesh局部细化实现方法,其特征在于:在步骤二中所述的“确定当前T-mesh中所有需要进行局部细化的面片”,其具体实现步骤如下:
(2.1)由T-splines的控制顶点与参数域上节点的对应关系确定由T-splines的控制顶点所组成的面片所对应的局部参数域;
(2.2)确定与该局部参数域有关的三角网格顶点;
(2.3)使用步骤(2.2)中所确定的与该局部参数域有关的三角网格顶点的参数坐标计算相应的T-splines上的点的笛卡尔坐标;
(2.4)计算具有相同参数坐标点的三角网格顶点以及T-splines顶点的笛卡尔坐标之间的误差,如果误差满足给定的阈值,则该面片不需要局部细分,否则需要局部细化。
5.根据权利要求1所述的一种基于半边数据结构的T-mesh局部细化实现方法,其特征在于:在步骤四中所述的“依据与面片切分有关的点将当前T-mesh中需要切分的面片一分为二,并确定切分后的面片及未切分的面片各自所包含的顶点”,其具体实现步骤如下:
(4.1)判断当前面片是否需要切分,如果当前面片不需要切分,则执行步骤(4.2)~(4.3);如果当前面片需要切分,则执行步骤(4.4)~(4.9);
(4.2)如果当前面片不需要切分,则新建一个面片,并确定该面片所包含的所有顶点;
(4.3)判断T-mesh中的所有面片是否已经完全遍历,如果没有完全遍历,则获取T-mesh中当前面片的下一个面片,之后执行步骤(4.1);如果T-mesh中的所有面片已完全遍历,则步骤四执行完毕;
(4.4)如果当前面片需要切分,则遍历与该面片相关的所有半边,并找到标记为与当前面片切分有关的两个点P点和Q点;
(4.5)新建一个面片,并将与当前面片以及P点有关的半边作为起始半边,将当前面片以及Q点有关的半边作为终止半边;
(4.6)逆时针顺序遍历步骤(4.5)中所确定的起始半边与终止半边之间的所有半边,并确定该新建面片所包含的所有顶点;
(4.7)再次新建一个面片,并将与当前面片以及Q点有关半边作为起始半边,将与当前面片以及P点有关的半边作为终止半边;
(4.8)逆时针依此遍历步骤(4.7)中所确定的起始半边与终止半边之间的所有半边,并确定该新建面片所包含的所有顶点;
(4.9)判断T-mesh中的所有面片是否已经完全遍历,如果没有完全遍历,则获取T-mesh中当前面片的下一个面片,之后执行步骤(4.1);如果T-mesh中的所有面片已完全遍历,则步骤四执行完毕。
6.根据权利要求1所述的一种基于半边数据结构的T-mesh局部细化实现方法,其特征在于:在步骤五中所述的“依据切分后的面片及未切分的面片各自所包含的顶点信息重建经过局部细化后的基于半边数据结构的T-mesh”,其具体步骤如下:
(5.1)对经过局部细化后T-mesh中的所有面片进行遍历,并依据每个面片中所包含的顶点信息建立与该面片相关的所有半边;
(5.2)确定每条半边的前一条半边与后一条半边。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610685293.0A CN106296824B (zh) | 2016-08-18 | 2016-08-18 | 一种基于半边数据结构的T-mesh局部细化实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610685293.0A CN106296824B (zh) | 2016-08-18 | 2016-08-18 | 一种基于半边数据结构的T-mesh局部细化实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106296824A CN106296824A (zh) | 2017-01-04 |
CN106296824B true CN106296824B (zh) | 2019-04-16 |
Family
ID=57678571
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610685293.0A Expired - Fee Related CN106296824B (zh) | 2016-08-18 | 2016-08-18 | 一种基于半边数据结构的T-mesh局部细化实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106296824B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106981097B (zh) * | 2017-03-17 | 2019-07-16 | 浙江大学 | 一种基于分区局部光顺权因子的t样条曲面拟合方法 |
CN110532670B (zh) * | 2019-08-26 | 2023-06-09 | 北航(天津武清)智能制造研究院有限公司 | 一种适分析样条实体模型构建方法及系统 |
CN113689556B (zh) * | 2021-10-25 | 2021-12-24 | 中国空气动力研究与发展中心计算空气动力研究所 | 一种块自适应型笛卡尔网格快速图映射方法及系统 |
CN114693869A (zh) * | 2022-03-08 | 2022-07-01 | 北京航空航天大学 | 一种基于半边半面数据结构的3d打印实体模型生成方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1430184A (zh) * | 2001-12-29 | 2003-07-16 | 田捷 | 利用半边数据结构实现三维网格模型的简化方法 |
CN105389851A (zh) * | 2015-10-22 | 2016-03-09 | 北京航空航天大学 | 一种基于顶点和新边点统一调整的Loop细分实现方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2517463C (en) * | 2003-03-26 | 2012-12-11 | Brigham Young University | System and method for defining t-spline and t-nurcc surfaces using local refinements |
-
2016
- 2016-08-18 CN CN201610685293.0A patent/CN106296824B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1430184A (zh) * | 2001-12-29 | 2003-07-16 | 田捷 | 利用半边数据结构实现三维网格模型的简化方法 |
CN105389851A (zh) * | 2015-10-22 | 2016-03-09 | 北京航空航天大学 | 一种基于顶点和新边点统一调整的Loop细分实现方法 |
Non-Patent Citations (2)
Title |
---|
An influence-knot set based new local refinement algorithm for T-spline surfaces;Aizeng Wang et al.;《Expert Systems with Applications》;20141231;第3915-3921页 |
一种基于半边数据结构的网格曲面细分算法;郑少开 等;《城市建筑理论研究》;20160331;第6卷(第8期);第1-3页 |
Also Published As
Publication number | Publication date |
---|---|
CN106296824A (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106296824B (zh) | 一种基于半边数据结构的T-mesh局部细化实现方法 | |
CN103985155B (zh) | 基于映射法的散乱点云Delaunay三角剖分曲面重构方法 | |
CN109685914A (zh) | 基于三角网格模型的剖切轮廓自动补面算法 | |
CN101582173B (zh) | 复杂地质构造块状模型构建方法 | |
CN109377561A (zh) | 一种基于共形几何的数模表面网格生成方法 | |
CN109360260A (zh) | 一种三角网格三维模型的切挖重构算法 | |
CN103714577B (zh) | 一种适用于带纹理模型的三维模型简化方法 | |
CN102629391A (zh) | 基于数字图形介质的三维空间结构图形切割及切片方法 | |
CN104715508B (zh) | 一种网格建模方法及装置 | |
CN103559374A (zh) | 一种多子网格模型上进行面分裂型曲面细分的方法 | |
CN109443357B (zh) | 基于全凸包扩张算法的障碍物间最优路径解算方法 | |
CN107146285A (zh) | 一种基于曲面拟合的任意自由曲面网格划分方法 | |
CN103366401B (zh) | 多层次虚拟服饰试穿的快速显示方法 | |
CN106981097A (zh) | 一种基于分区局部光顺权因子的t样条曲面拟合方法 | |
CN104317886A (zh) | 断层约束下网格节点插值时近邻条件数据点的搜索选取方法 | |
CN108171793A (zh) | 一种探查层叠区域三角网格的方法 | |
CN108537886A (zh) | 一种虚拟手术切割中的高质量网格划分和优化方法 | |
CN112439601A (zh) | 一种面向大型船舶外立面的喷涂机器人自动轨迹规划方法 | |
CN109460564B (zh) | 一种电网潮流图布线方法 | |
CN104504758B (zh) | 义齿冠表面曲面生成方法 | |
CN102446368A (zh) | 快速成型制造中基于分层邻接排序算法的stl模型快速切片方法 | |
CN104778308B (zh) | 飞机结构型材的识别方法和装置 | |
CN108510579B (zh) | 一种工业复杂裁剪曲面的渲染显示方法 | |
CN114119628B (zh) | 一种基于特征模板的点云精确分割方法 | |
CN115587451A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20190416 Termination date: 20210818 |