700 likes | 888 Views
图形的实体造型方法. ☆ 几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较. 几何造型技术. 造型技术:研究如何在计算机中建立 恰当的模型 表示这些物体的技术。 真实世界中存在着千姿百态的物体; 它是计算机图形学的重要研究内容之一。 其中, 实体造型技术 关注表示 实体 的 信息的完备性 和 可操作性 , 它是由于计算机辅助设计和制造的需要而发展起来的,现在已广泛应用于各种造型系统之中。.
E N D
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 几何造型技术 • 造型技术:研究如何在计算机中建立恰当的模型表示这些物体的技术。 • 真实世界中存在着千姿百态的物体; • 它是计算机图形学的重要研究内容之一。 • 其中,实体造型技术关注表示实体的信息的完备性和可操作性, • 它是由于计算机辅助设计和制造的需要而发展起来的,现在已广泛应用于各种造型系统之中。
数学中的点、线、面是其所代表的真实世界中对象的一种抽象,它们之间存在着一定的差别。数学中的点、线、面是其所代表的真实世界中对象的一种抽象,它们之间存在着一定的差别。 例: 数学中平面是二维的,没有厚度,体积为零; 在真实世界中,一张纸无论有多么薄,它也是一个三维的体,具有一定的体积。 这种差距造成了在计算机中以数学方法描述的形体可能是无效,即在真实世界中不可能存在。 ☆几何造型基础 ● 实体的定义 ◘ 现实实体性质 ◘ 点集拓扑表示 ◘ 正则点集定义 ◘ 二维流形定义 ◘ 正则运算定义 ◘ 正则运算原理 ◘ 正则运算计算 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 实体的定义 • 如右图的立方体的边上悬挂着一张面,立方体是三维物体,而平面是二维对象,它们合在一起就不是一个有意义的物体。通常,实体造型中必须保证物体的有效性。
☆几何造型基础 ● 实体的定义 ◘ 现实实体性质 ◘ 点集拓扑表示 ◘ 正则点集定义 ◘ 二维流形定义 ◘ 正则运算定义 ◘ 正则运算原理 ◘ 正则运算计算 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 现实物体的性质 • 满足如下性质的物体称为有效物体或实体。 • 具有一定形状(流体不是实体造型技术描述的对象)。 • 具有确定的封闭边界(表面)。 • 是一个内部连通的三维点集。 • 如果该物体可分成独立的几个部分,不妨将其看作多个物体。 • 这条性质排除了下图中的形体作为有效物体的情况, 其中:两个立方体仅以一条棱相接,内部区域是不连通的。 • 占据有限的空间,即体积有限。 • 经过任意的运算(如切割、粘合)之后,仍然是有效的物体。
☆几何造型基础 ● 实体的定义 ◘ 现实实体性质 ◘ 点集拓扑表示 ◘ 正则点集定义 ◘ 二维流形定义 ◘ 正则运算定义 ◘ 正则运算原理 ◘ 正则运算计算 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 实体的点集拓扑表示 从点集拓扑的角度可给出实体的简洁定义。 • 三维物体可看作一个点集,它由内点与边界点共同组成。 • 内点是指点集中具有完全包含于该点集的充分小邻域的一些点。 • 边界点就是指那些不具备此性质的点集中的点。 • 定义点集的正则运算r: r·A=c·i·A。 其中:i为取内点运算,c取闭包运算,A为一个点集,那么, • i·A即为A的全体内点组成的集合,称为A的内部,它是一个开集。 • c·i·A为A的内部闭包,是i·A与其边界点的并集,它本身是一个闭集。
☆几何造型基础 ● 实体的定义 ◘ 现实实体性质 ◘ 点集拓扑表示 ◘ 正则点集定义 ◘ 二维流形定义 ◘ 正则运算定义 ◘ 正则运算原理 ◘ 正则运算计算 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 实体的正则运算过程 • 正则运算即为:先对物体取内点,再取闭包的运算。 • 下图示出了正则运算的过程: • 对图(a)中的物体做作取内点运算得到图(b),该运算去掉了物体所有的边界点,余下的即为物体的内部; • 对图(b)中物体的内部作取闭包运算,得到其闭包图(c),它是一个正则点集。 • 由上述过程不难看出:正则运算的作用是去除与物体维数不一致的悬挂部分或孤立部分: • 如:三维物体的悬挂面、线,二维物体的悬挂线等。 (a)带有悬挂边、孤立边和孤立点的二维物体 (b)物体的内部 (c)物体内部的闭包
☆几何造型基础 ● 实体的定义 ◘ 现实实体性质 ◘ 点集拓扑表示 ◘ 正则点集定义 ◘ 二维流形定义 ◘ 正则运算定义 ◘ 正则运算原理 ◘ 正则运算计算 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 实体的正则点集定义 • r ·A称为A的正则点集, • 称A为正则点集,如果它满足r·A=A。 • 问题:正则点集是实体? • 下图中由两个立方体组成的物体 • 这样的物体在真实世界中是不存在的。 • 这个物体可分成独立的几个部分,不妨将其看作多个物体。
☆几何造型基础 ● 实体的定义 ◘ 现实实体性质 ◘ 点集拓扑表示 ◘ 正则点集定义 ◘ 二维流形定义 ◘ 正则运算定义 ◘ 正则运算原理 ◘ 正则运算计算 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 实体的二维流形定义 • 二维流形是指这样一些面: • 其上任一点都存在一个充分小的邻域, • 该邻域与平面上的圆盘是同构的, (在该邻域与圆盘之间存在连续的1-1映射) • 任何客观存在的物体,如立方体,其表面上任一点都存在与圆盘同构的邻域。 • 引入二维流形概念的目的是为排除正则点集中类似于由两个立方体组成的物体。 • 其上的点不存在这样的邻域。 • 实体的定义(可计算条件): • 对于一个占据有限空间的正则点集,如果其表面是二维流形,则该正则点集为实体(有效物体)。 • 这个描述中的条件是在计算机中可检测的,对衡量一个模型表示是否为实体非常有用。
正则集合运算功用:通过对简单实体做适当运算来构造复杂实体。正则集合运算功用:通过对简单实体做适当运算来构造复杂实体。 实体可看作点集,对实体进行的运算主要是集合运算。 对两个实体做普通的集合运算并不能保证其结果仍是一个实体(右图)。 正则集合运算op*: A op* B= r · (A op B), op是普通的集合运算, 即:∩、∪和- r为正则运算,op*=∩*、∪*和-* 分别称为正则交、正则并和正则差。 正则集合运算过程: 先对A、B做普通集合运算,再做正则运算。 ☆几何造型基础 ● 实体的定义 ◘ 现实实体性质 ◘ 点集拓扑表示 ◘ 正则点集定义 ◘ 二维流形定义 ◘ 正则运算定义 ◘ 正则运算原理 ◘ 正则运算计算 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 正则集合运算定义 两物体的集合运算 普通集合运算 正则集合运算
任一实体S可用其边界bS和其内部iS来表示,即:任一实体S可用其边界bS和其内部iS来表示,即: S=bS∪iS。由实体定义可知: 边界bS是封闭的,它将整个三维空间分成三个区域:S的内部iS,其自身bS与S的外部eS。 边界与实体是一一对应的。 实体A和B正则集合运算A op* B,转化为求其边界b(A op* B) 实体A的边界bA按其位于实体B的内部iB、边界bB、外部eB可分别表示为:bA∩iB, bA∩bB, bA∩eB。 即:bA=((bA∩iB)∪(bA∩bB)∪(bA∩eB))。 同理,实体B的边界bB可表示为: bB=((bB∩iA)∪(bB∩bA)∪(bB∩eA))。 bA∩bB=bB∩bA是A与B的公共边界,它可分成两部分: (bA∩bB)同侧、 (bA∩bB)异侧。 (bA∩bB)同侧由这样的边界构成:A与B位于这些边界的同一侧; (bA∩bB)异侧的含义相反。 ☆几何造型基础 ● 实体的定义 ◘ 现实实体性质 ◘ 点集拓扑表示 ◘ 正则点集定义 ◘ 二维流形定义 ◘ 正则运算定义 ◘ 正则运算原理 ◘ 正则运算计算 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 正则集合运算原理
对于A∩* B,由交的定义可知: A、B两物体的边界位于对方内部的部分, 即:bA∩iB和bB∩iA是b(A∩* B)的组成部分; A、B两物体的边界位于对方外部的部分, 即:bA∩eB和bB∩eA不是b(A∩* B)的组成部分; 对于A、B的重合边界有:(bA∩bB)同侧∈b(A∩*B), (bA∩bB)异侧则不属于b(A∩*B)。由此得到: b(A∩* B)=(bA∩iB)∪(bB∩iA)∪(bA∩bB)同侧。 同理,可得到A、B正则并和差的边界表达式: b(A∪* B)=(bA∩eB)∪(bB∩eA)∪(bA∩bB)同侧。 b(A -* B)=(bA∩eB)∪(bB∩iA)∪(bA∩bB)异侧。 bA∩iB P4 (bA∩bB)异侧 P3 bB∩iA P1 P2 (bA∩bB)同侧 (a). A∩*B的边界 (bA∩bB)异侧 bB∩eA bB∩eA bA∩eB bB∩iA bA∩eB (bA∩bB)同侧 (c). A-*B的边界 (b). A∪*B的边界 ☆几何造型基础 ● 实体的定义 ◘ 现实实体性质 ◘ 点集拓扑表示 ◘ 正则点集定义 ◘ 二维流形定义 ◘ 正则运算定义 ◘ 正则运算原理 ◘ 正则运算计算 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 正则集合运算计算
图形对象的描述需要大量图形信息和非图形信息,图形对象的描述需要大量图形信息和非图形信息, 对象及构成它的点、线、面的位置及其相互间关系和几何尺寸等都是图形信息; 表示这些对象图形的线型、颜色、亮度以及供分析和模拟用的质量、比重和体积等数据是有关对象的非图形信息。 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ◘ 几何点的定义 ◘ 几何边面定义 ◘ 几何环的定义 ◘ 几何体的定义 ◘ 几何分量关系 ◘ 拓扑信息类型 ◘ 拓扑信息应用 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 几何模型的定义 • 图形信息常从拓扑信息和几何信息两方面考虑。 • 几何信息:指形体在欧氏空间中的位置和大小; • 拓扑信息:是形体各分量的数目及其相互之间的连接关系。
点是0维几何元素。在形体定义中一般不允许存在孤立点。点是0维几何元素。在形体定义中一般不允许存在孤立点。 一维空间中的点用一元组{t}表示; 二维空间中的点用二元组{x, y}或{x(t), y(t)}表示; 三维空间中的点用三元组{x, y, z}或{x(t), y(t), z (t)}表示。 n维空间中的点在齐次坐标系下用n+1维表示。 点是几何造型中的最基本元素, 自由曲线、曲面或其他形体均可用有序的点集表示。 计算机存储、管理、输出形体的实质就是对点集及其连接关系的处理。 在自由曲线和曲面的描述中常用三种类型的点,即: ①控制点。用来确定曲线和曲面的位置与形状,相应曲线和曲面不一定经过的点; ②型值点。用来确定曲线和曲面的位置与形状,相应曲线和曲面一定经过的点; ③插值点:为提高曲线和曲面的输出精度,在型值点之间插入的一系列点。 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ◘ 几何点的定义 ◘ 几何边面定义 ◘ 几何环的定义 ◘ 几何体的定义 ◘ 几何分量关系 ◘ 拓扑信息类型 ◘ 拓扑信息应用 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 几何元素定义:点
边是一维几何元素 是两个邻面(正则形体)或多个邻面(非正则形体)的交界。 直线边由其端点(起点和终点)定界; 曲线边由一系列型值点或控制点表示,也可用显式、隐式方程表示。 面是二维几何元素 是形体上一个有限、非零的区域,由一个外环和若干个内环界定其范围。 一个面可以无内环,但必须有一个且只有一个外环。 面有方向性,一般用其外法矢方向作为该面的正向。 若一个面的外法矢向外,此面为正向面;反之,为反向面。 区分正向面和反向面在面面求交、交线分类、真实图形显示等方面都很重要。 几何造型中常分平面、二次面、双三次参数曲面等形式。 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ◘ 几何点的定义 ◘ 几何边面定义 ◘ 几何环的定义 ◘ 几何体的定义 ◘ 几何分量关系 ◘ 拓扑信息类型 ◘ 拓扑信息应用 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 几何元素定义:边和面
环:有序、有向边(直线或曲线段)组成的面的封闭边界。环:有序、有向边(直线或曲线段)组成的面的封闭边界。 环中的边不能相交,相邻两条边共享一个端点。 环有内外之分: 确定面的最大外边界的环称之为外环,通常其边按逆时针方向排序。 把确定面中内孔或凸台边界的环称之为内环,其边相应外环排序方向相反,通常按顺时针方向排序。 在面上沿一个环前进,其左侧总在面内,右侧总在面外。 内环 外环 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ◘ 几何点的定义 ◘ 几何边面定义 ◘ 几何环的定义 ◘ 几何体的定义 ◘ 几何分量关系 ◘ 拓扑信息类型 ◘ 拓扑信息应用 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 几何元素定义:环
体是三维几何元素 由封闭表面围成的空间; 是欧氏空间中非空、有界的封闭子集,其边界是有限面的并集。 常用的体素采用三种定义形式: 从实际形体中选择出来, 可用一些确定的尺寸参数控制其最终位置和形状的一组单元,如长方体、圆柱体、圆锥体、圆环体、球体等; 由参数定义的一条(或一组)截面轮廓线沿一条(或一组)空间参数曲线作扫描运动而产生的形体; 用代数半空间定义的形体。 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ◘ 几何点的定义 ◘ 几何边面定义 ◘ 几何环的定义 ◘ 几何体的定义 ◘ 几何分量关系 ◘ 拓扑信息类型 ◘ 拓扑信息应用 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 几何元素定义:体
对于不同的用户,感兴趣的几何分量并不相同。对于不同的用户,感兴趣的几何分量并不相同。 笔划式输入输出设备中以描述形状的轮廓线为主,形体顶点的几何信息较为实用; 光栅扫描型输入输出设备中主要处理具有明暗度和阴影的图,形体的面几何信息较为实用。 只用几何信息来表示形体还不充分,常常还会出现形体表示的二义性 形体的表示除了几何信息外,还应提供几何分量之间的连接关系,即拓扑关系。 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ◘ 几何点的定义 ◘ 几何边面定义 ◘ 几何环的定义 ◘ 几何体的定义 ◘ 几何分量关系 ◘ 拓扑信息类型 ◘ 拓扑信息应用 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 几何分量间的关系
拓扑信息指的是顶点、边和面之间的连接关系。拓扑信息指的是顶点、边和面之间的连接关系。 多面体的拓扑关系可用九种不同的形式描述。 v→{v} v→{e} v→{f} 面相邻性 顶点相邻性 点边相邻性 e→{v} e→{e} e→{f} v v e f f f e v v f v f f e v v v v e e e f e f f f e v e v e 点边包含性 面边相邻性 边相邻性 e e e e f→{v} f→{e} f→{f} 面点包含性 面边包含性 面相邻性 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ◘ 几何点的定义 ◘ 几何边面定义 ◘ 几何环的定义 ◘ 几何体的定义 ◘ 几何分量关系 ◘ 拓扑信息类型 ◘ 拓扑信息应用 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 拓扑信息的形式
不同的用户对不同的拓扑关系感兴趣。 对画线的图形系统来说,知道: v→{v}, e→{v}, f→{v}这些拓扑关系 就可知道从顶点如何连接成边、面等几何单元; 在消隐线、面的算法中,则希望知道面的相邻性: 即:f→{f}; 在形体的拼合运算中,则希望知道顶点的邻接面: 即:v→{f}。 显然,已知某些拓扑关系可推导出另外一些拓扑关系。 由于某些关系的相互推导需要花费较大代价,所以许多实用系统同时存储多种拓扑关系,以节省时间。 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ◘ 几何点的定义 ◘ 几何边面定义 ◘ 几何环的定义 ◘ 几何体的定义 ◘ 几何分量关系 ◘ 拓扑信息类型 ◘ 拓扑信息应用 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 拓扑信息的应用
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ◘ 多边形应用 ◘ 多边形边表 ◘ 边表结构改进 ◘ 边表处理要求 ◘ 平面方程 ◘ 多边形方向 ◘ 多边形位置 ◘ 多边形网格 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 多边形表面表示方法 • 表示三维图形的最普遍方式是使用一组包围物体内部的表面多边形来描述其边界。 • 由于表面以线性方程形式描述,可简化并加速物体表面的绘制和显示。 • 多边形描述常称作“标准图形物体”。 • 很多图形包允许以其它方法对物体描述,如样条曲面,它在转换到多边形表示后再加以处理。 • 用顶点坐标集和相应属性参数可以给定一个多边形表面。 • 一旦每个多边形的信息输入后,它们被存放在表中以便用于以后对场景中物体的处理、显示和管理。 • 多边形数据表可分两组来组织:几何表和属性表。 • 几何表包括顶点坐标和用来标识多边形表面空间方向的参数。 • 属性表包括指明物体透明度及表面反射度的参数和纹理特征。
多面体的多边形表示精确地定义了物体的表面特征,多面体的多边形表示精确地定义了物体的表面特征, 其它物体则将表面嵌入到物体中生成多边形网络来逼近。 由于线框轮廓能快速显示以概要地说明表面结构。因此,这种表示在设计和实体模型应用中普遍采用。 通过沿多边形表面进行明暗处理,来消除或减少多边形边界,以实现真实性绘制。 曲面上采用多边形网格逼近,可通过将曲面分成更小的多边形面片加以改进。 隐藏线消去的圆柱线框表示 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ◘ 多边形应用 ◘ 多边形边表 ◘ 边表结构改进 ◘ 边表处理要求 ◘ 平面方程 ◘ 多边形方向 ◘ 多边形位置 ◘ 多边形网格 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 实体多边形表示的应用
存储几何数据的一个方法是建立三张表:顶点表、边表和多边形表。存储几何数据的一个方法是建立三张表:顶点表、边表和多边形表。 物体中的每个顶点坐标值存储在顶点表中。含有指向顶点表指针的边表用来为多边形每条边标识顶点。 多边形表含有指向边表的指针来标识每个多边形边。 为便于引用,可为每个物体及其组成多边形面片赋以标识符。 用三张表分列几何数据使得可方便地引用每个物体的单个组成部分(顶点、边、多边形)。 多边形面表 边表 顶点表 S1:E1,E2 ,E3 E1:V1,V2 V1:x1,y1,z1 E2:V2,V3 S2:E3,E4,E5,E6 V2:x2,y2,z2 E3:V1,V3 V3:x3,y3,z3 E4:V3,V4 V4:x4,y4,z4 V5:x5,y5,z5 E5:V4,V5 E5:V1,V5 V1 E3 E1 E6 S1 V3 E2 S2 V5 V2 E4 E5 V4 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ◘ 多边形应用 ◘ 多边形边表 ◘ 边表结构改进 ◘ 边表处理要求 ◘ 平面方程 ◘ 多边形方向 ◘ 多边形位置 ◘ 多边形网格 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 多边形完整边表表示
另一个方法是仅用两张表:顶点表和多边形表。另一个方法是仅用两张表:顶点表和多边形表。 但这种方法的某些边可能要画二次。 还有一种可用的方法是就只用一张多边形表。 由于每个多边形中的每个顶点的坐标值都需列出,因此,坐标信息有重复, 边信息也肯定由多边形表中的顶点重复构造。 E1: V1,V2,S1 E2: V2,V3 ,S1 E3: V1,V3 ,S1,S2 E4: V3,V4 ,S2 E5: V4,V5 ,S2 E5: V1,V5 ,S2 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ◘ 多边形应用 ◘ 多边形边表 ◘ 边表结构改进 ◘ 边表处理要求 ◘ 平面方程 ◘ 多边形方向 ◘ 多边形位置 ◘ 多边形网格 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 多边形边表改进 • 还可在前述的数据表中增加额外信息用来加快信息析取。 • 例如,可将边表扩充包括指向多边形表的指针(如图所示),这样两多边形的公共边可以更快地标识,这对需要在明暗处理时对跨越一边的两多边形之间平滑过渡的绘制程序特别有利。 • 类似地,扩充顶点表可以从顶点指引到相应的边。
数据的一致性检验和完整性检验是非常重要的 几何数据表可包含复杂物体中顶点和边的扩充列表。 当顶点、边及多边形被指定后,某些输入错误有可能(特别是在交互式应用中)导致物体显示失真。 数据表中的信息越多,就越容易检查错误。 使用三张表(顶点,边和多边形)的方案因提供了更多信息,而使错误检查更方便。 可以由图形包完成的测试有: (1).每个顶点至少是二条边的端点; (2).每条边至少是一个多边形的部分; (3).每个多边形是封闭的; (4).每个多边形至少有一条公共边; (5).如果边表包含对多边形的指针,每一个被多边形指针引用的边有一个逆指针指回到多边形。 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ◘ 多边形应用 ◘ 多边形边表 ◘ 边表结构改进 ◘ 边表处理要求 ◘ 平面方程 ◘ 多边形方向 ◘ 多边形位置 ◘ 多边形网格 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 多边形表示的基本要求
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ◘ 多边形应用 ◘ 多边形边表 ◘ 边表结构改进 ◘ 边表处理要求 ◘ 平面方程 ◘ 多边形方向 ◘ 多边形位置 ◘ 多边形网格 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 多边形平面方程 • 为了产生一个三维物体显示,一些处理需要有关物体上单个表面部分的空间方向的信息,这一信息来源于顶点坐标值和多边形所在的平面方程。 • 平面方程可表示为:Ax+By+Cz+D=0, 其中(x,y,z)是平面中任一点,系数A,B,C和D是描述平面和空间特征的常数。 • 从平面中三个顺序多边形(x1,y1,z1),(x2,y2,z2)和(x3,y3,z3)三个不共线点的坐标值得到的三个方程可解出A,B,C,D,解有关A/D,B/D,C/D的线性平面方程: (A/D)xk+(B/D)yk+(C/D)zk=-1(k=1,2,3), • 可得平面方程中的系数为: A=y1(z2-z3)+y2(z3-z1)+y3(z1-z2), B=z1(x2-x3)+z2(x3-x1)+z3(x1-x2), C=x1(y2-y3)+x2(y3-y1)+x3(y1-y2), D=-x1(y2z3-y3z2)-x2(y3z1-y1z3)-x3(y1z2-y2z1)
N=(A,B,C) y z x 向量N垂直于以方程Ax+By+Cz=0表示的平面,分量为(A,B,C) y x z 单位立方体中阴影多边形平面方程为x-1=0,法向量N=(1,0,0) ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ◘ 多边形应用 ◘ 多边形边表 ◘ 边表结构改进 ◘ 边表处理要求 ◘ 平面方程 ◘ 多边形方向 ◘ 多边形位置 ◘ 多边形网格 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 多边形表面的方向 • 平面的空间方向用平面的法向量表示, • 平面法向量的笛卡尔分量为(A,B,C)。 • 通常讨论的是包含物体内部的多边形平面,因此需要区分平面的两个侧面: • 面向物体内部的一面称作“内侧”面, • 向外的面称为“外侧”面。 • 如果多边形顶点指定为逆时针方向,则在右手系统中观察平面的外侧时,法向量方向由里向外。 例:求右下图阴影面的法向量分量,可选择多边形边界四个顶点中的三个。 • 沿从立方体里面向外面的方向以逆时针方向排列三点。 • 对这些有序的顶点坐标,运用方程得到平面系数:A=1,B=0,C=0,D=-1。 • 该平面的法向量指向x轴的正方向。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ◘ 多边形应用 ◘ 多边形边表 ◘ 边表结构改进 ◘ 边表处理要求 ◘ 平面方程 ◘ 多边形方向 ◘ 多边形位置 ◘ 多边形网格 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 多边形面方向及位置关系 • 平面法向量也可以通过向量叉积得到。 • 选三个顶点V1、V2和V3, • 从里向外以右手系逆时针方向。形成二个向量:一个从V1到V2,另一个从V1到V3。 • 以叉积计算N:N=(V2-V1)×(V3-V1),计算出平面参数A,B和C。 • 只要将多边形顶点之一的坐标值代入平面方程即可解得参数D的值。给出平面的法向量N和平面上任一点P,平面方程可以向量形式表示:N·P=-D。 • 平面方程可用来鉴别空间点与物体平面的位置关系。 • 对不在平面上的点(x,y,z)有Ax+By+Cz+D≠0。 • 也可根据Ax+By+Cz+D值的符号(或正或负)来判别点在面的内部或外部: • 如Ax+By+Cz+D<0,则点(x,y,z)在表面的内部; • 如Ax+By+Cz+D>0,则点(x,y,z)在表面的外部。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ◘ 多边形应用 ◘ 多边形边表 ◘ 边表结构改进 ◘ 边表处理要求 ◘ 平面方程 ◘ 多边形方向 ◘ 多边形位置 ◘ 多边形网格 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 多边形网格 • 一些图形包提供了对物体建模的几个多边形函数。 • 一个单独的平面可以由诸如填充函数来指定。 • 当物体表面是拼接而成时,用网格函数来给出表面片会更方便一些。 • 三角形网格:n个顶点产生n-2个连通三角形。 • 四边形网格:n行m列顶点产生(n-1)×(m-1)个四边形。 • 如果多边形的顶点数多于三个,它们有可能不在一个平面。 • 一种方法是简单地将多边形剖分成三角形。 • 另一可选方法是估算平面参数A、B和C。 • 采用平均方法或将多边形投影到坐标平面上。 A正比于yz平面上的多边形投影区域, B正比于xz平面上的多边形投影区域, C正比于xy平面上的多边形投影区域。 • 高性能的图形系统一般使用多边形网格(通常是三角形) ,并且建立几何及属性信息数据库以方便处理多边形面片来对物体建模。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ◘ 特征表示应用 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 特征表示方法 • 特征表示就是用一组特征参数来定义一簇类似的物体。特征从功能上可以分成形状特征、材料特征,等等。 • 形状特征如体素、孔,槽、台阶等; • 材料特征如硬度、密度、热处理方法等等。 • 若只考虑形状特征,一个圆柱或圆锥就可以用底面半径R和高度H参数组(R,H)来定义;一个n棱柱可用参数组(n,R,H),其中n为棱柱边数,R表示底面正多边形的外接圆的半径。 • 更复杂的特征定义可以采用层次化和参数化方式形成特征定义体系。 Form feature “SLOT” and its variation
DF2 Step1 Step2 DF1 Slot2 The local area that need to be recognized DF1 DF2 DF3 step3 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ◘ 特征表示应用 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 特征表示的应用 Desing feature model Machining feature model Add a design feature DF3 特征表示适用于表示工业上定型的标准件,标准件既可以十分简单,如立方体、圆柱,也可以相当复杂,如齿轮、轴承等。所有的标准件保存在一个数据库中,使用时,用户只需指定适当的参数值(参数实例化)就可以以“搭积木”方式应用。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ◘ 空间位置枚举 ◘ 空间枚举应用 ◘ 四叉树表示 ◘ 八叉树表示 ◘ 八叉树优点 ◘ 八叉树缺点 ◘ 单元分解表 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 空间分割表示 • 在空间分割表示中,实体被分割表示为互不相交的“粘合”在一起的更基本的体素(voxel)。 • 基本体素的大小、位置和类型可以多种多样,但它们一般形状都比较简单。 • 本节介绍三种常用的空间分割表示,即: • 空间位置枚举表示法; • 八叉树表示法; • 单元分解表示法。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ◘ 空间位置枚举 ◘ 空间枚举应用 ◘ 四叉树表示 ◘ 八叉树表示 ◘ 八叉树优点 ◘ 八叉树缺点 ◘ 单元分解表 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 空间位置枚举表示 • 二维图形空间枚举 • 将二维平面上的一幅图像分割成大小相同、形状规则(可看作正方形)的像素,然后以像素的集合来表示图像,采用的数据结构是二维数组。 • 空间位置枚举表示:将上述方法推广到三维空间中。 • 通常,物体的体积总是有限的,选择一个包含物体的立方体作为考虑的空间; • 将立方体划分为均匀的小立方体,小立方体的边长为Δ; • 建立三维数组C[I][J][K],使得数组中的每一元素C[i][j][k]与左下角点坐标为(i·Δ,j·Δ,k·Δ)的小立方体对应。 • 当该立方体被物体所占据时, 取C[i][j][k]的值为1,否则为0。 • 数组C就唯一表示了包含于立方体之内的所有物体。 • 数组的大小取决于空间分辨率(Δ)的大小和所感兴趣的立方体空间的大小。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ◘ 空间位置枚举 ◘ 空间枚举应用 ◘ 四叉树表示 ◘ 八叉树表示 ◘ 八叉树优点 ◘ 八叉树缺点 ◘ 单元分解表 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 空间位置枚举表示应用 • 空间位置枚举法是一种穷举表示法,虽然通常情况下,它只是物体的近似表示,它可以用来表示任何物体。 • 这种表示很容易实现物体的集合运算以及计算物体的诸如体积等的许多整体性质。 • 它的缺点也是明显的。 • 例如:这种表示没有明确给出物体的边界信息,不适于图形显示,并且它占据的存储量非常大。 • 如果将上述立方体空间划分成1024×1024×1024个小立方体,那么表示该空间中的物体就需要1G二进制位! 。 • 对空间位置枚举法表示的物体的许多处理可以借鉴数字图像处理中的方法。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ◘ 空间位置枚举 ◘ 空间枚举应用 ◘ 四叉树表示 ◘ 八叉树表示 ◘ 八叉树优点 ◘ 八叉树缺点 ◘ 单元分解表 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 四叉树表示 • 将二维正方形区域作为四叉树的根节点,它可能处于三种状态: • 完全被图形覆盖:标识F(Full); • 部分被覆盖:标识P(Partial); • 完全不被覆盖:标识E(Empty)。 • 若根节点处于状态F或E,则四叉树建立完毕; • 否则,将其划分成四个小正方形区域,分别标以编码0,1,2,3。这四个小正方形区域就成了第一层子节点,对它们进行类似与根节点的处理。 • 如此下去,直至建立图形的四叉树表示。 • 对状态为P的分割层次可以根据实际需要予以指定。 • 例如:若根节点正方形的边长为1024单位,希望表示图形的最小正方形的边长不小于1单位,则分割层次就不能超过10。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ◘ 空间位置枚举 ◘ 空间枚举应用 ◘ 四叉树表示 ◘ 八叉树表示 ◘ 八叉树优点 ◘ 八叉树缺点 ◘ 单元分解表 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 八叉树表示 • 八叉树表示对空间位置枚举法的空间分割方法作了改进: • 它并不是统一将物体所在的立方体空间均匀划分成边长为Δ的小立方体,而是对空间进行自适应划分; • 采用具有层次结构的八叉树来表示物体。 • 建立物体的八叉树表示的过程与四叉树大体相同。 • 每个节点代表的是一个立方体; • 对它的分割结果产生8个子节点; • 节点的编码从0到7。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ◘ 空间位置枚举 ◘ 空间枚举应用 ◘ 四叉树表示 ◘ 八叉树表示 ◘ 八叉树优点 ◘ 八叉树缺点 ◘ 单元分解表 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 八叉树表示的优点 • 易实现实体之间的正则集合运算。 • 以正则并为例。 假设已获得A、B实体的八叉树表示,为求A∩*B: • 只要遍历A、B的八叉树,将它们对应的节点取并; • 同时,将结果插入到A∩* B八叉树相应位置。 • 容易计算实体的整体性质。如质量和体积等。 • 八叉树中的每一层节点的体积都是已知的,只要遍历一次即可获得整个实体的体积的信息。 • 容易实现隐藏线和隐藏面的消除。 • 在八叉树表示中,各节点之间的序关系是简单且固定的,使得计算比较容易。 • 消除隐藏线和隐藏面算法的关键是对物体(及其不同部分)按其距观察点的远近排序。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ◘ 空间位置枚举 ◘ 空间枚举应用 ◘ 四叉树表示 ◘ 八叉树表示 ◘ 八叉树优点 ◘ 八叉树缺点 ◘ 单元分解表 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 八叉树表示的缺点 • 八叉树表示具有与空间位置枚举表示类型的缺点 • 通常不能精确表示一个实体, • 对八叉树表示的实体做任意几何变换比较困难。 • 尽管采用了自适应空间分割,八叉树表示仍然需要较大的存储空间。 • 减少所需的存储空间的方法很多。 • 线性八叉树是八叉树的等价形式,它们之间很容易实现相互转换。线性八叉树表示适于存储,当需要对实体做各种运算时,再将其转换成八叉树表示形式。 • 线性八叉树是一个用线性结构来存储八叉树。 • 如,一维数组:数组中仅存放八叉树的那些状态为F的叶结构,每个叶节点可由从根节点到它的路径(编码序列)唯一标识。 • 假如八叉树中只有三个节点(5,74,75)的状态为F,那么,该实体的线性八叉树为(5X,74X,75X),其中X为一个大于7的整数,它标志该节点的结束。
基本体素 同一实体的不同表示 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ◘ 空间位置枚举 ◘ 空间枚举应用 ◘ 四叉树表示 ◘ 八叉树表示 ◘ 八叉树优点 ◘ 八叉树缺点 ◘ 单元分解表 ● 推移表示方法 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 单元分解表示 • 单元分解表示从另一个角度对空间位置枚举表示做了改进。 • 以不同类型的基本体素(而不是单一的立方体)通过“粘合”运算来构造新的实体, • 基本体素可以是任何简单实体(与球拓扑同构),如圆柱、圆锥、多面体等。 • 粘合运算使两个实体在边界面上相接触,但它们的内部并不相交。 • 只要基本体素的类型足够多,单元分解表示法能表示范围相当广泛的物体。 • 单元分解表示的问题是: • 单元分解表示法不具有唯一性, • 即:同一实体可具有多种表示形式。 • 所构造的物体的有效性难以保证 • 空间位置枚举表示法与八叉树表示法中的物体有效性是自动得到保证。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ◘ 广义推移表示 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 推移表示 • 推移表示(sweep representation): • 将物体A沿空间一条轨迹P推移时,A的轨迹定义了一个新的物体B,则物体B可以由物体A与轨迹P共同来表示。 • 平移sweep: • 若物体A是一个二维平面区域,轨迹是垂直于该平面的直线段,推移结果为一个柱体。 • 由平移sweep得到的物体叫平移sweep体。 • 平移sweep的一个简单推广 • 允许二维区域在推移的过程中大小可变, • 若正方形沿轨迹向前推移时,其边长呈线性递减,得到的平移sweep体是四棱锥。 • 轨道可以不垂直于二维区域所在的平面。 • 正方形沿任一方向推移得到一个平行六面体; • 旋转sweep: • 将一个二维区域绕一个轴旋转而构成新的物体。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ◘ 广义推移表示 ● 边界表示方法 ● 构造几何实体 ☆实体表示比较 广义推移表示 • 广义sweep:允许待推移物体A在推移过程中任意变化,轨道P为任意曲线。 • 在广义sweep中,物体A的尺寸、形状、朝向在前进过程中都可以改变。 • 广义sweep体可以是非常复杂的物体,其表示能力大大强于平移sweep与旋转sweep,但需要的计算也复杂得多。 • 一般来说,对sweep体做正则集合运算是困难的。 • 即使是非常简单的sweep体,它们在正则运算下也不是封闭的。 • 如右图:两个简单的平移sweep体的正则并不再是平移sweep体。 • 尽管如此,由于推移表示简单、直观,许多造型系统都采用它作为用户的输入手段。 两个简单的平移sweep 两者之间不是平移sweep
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 边界的表示 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 边界表示 • 边界表示(B_Reps,Boundary Representation) • 通过描述实体的边界来表示一个实体的方法。 • 下图为一个实体的边界表示的简单示意。 • 实体的边界与实体是一一对应的,定义了实体的边界,该实体就唯一地确定了。 • 实体的边界可以是平面多边形或曲面片。 • 通常情况下,曲面片最终都是被近似地离散成多边形来处理; • 有些边界表示方法(基于特定的数据结构与算法)甚至限制边界面必须由平面凸多边形或三角形构成。
v=8, e=12, f=6 v=4, e=6, f=4 v=6, e=12, f=8 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 简单欧拉检测 ◘ 广义欧拉公式 ◘ 边界的表示 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 简单多面体及欧拉公式 • 平面多面体指表面由平面多边形构成的三维体。 • 其表面上的每条边被偶数个多边形共享。 • 为排除非实体的多面体,要求多面体表面具有二维流形性质,即:多面体上的每条边只严格属于两个多边形。 • 简单多面体是指与球拓扑同构的多面体,即它可以连续变换成一个球。其满足欧拉公式: v-e+f=2 • v,e,f分别是多面体的顶点数、边数和面数。
v=10, e=15, f=7 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 简单欧拉检测 ◘ 广义欧拉公式 ◘ 边界的表示 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 简单多面体的检测 • 欧拉公式是一个多面体为简单多面体的必要条件,而不是充分条件。 • 如果一个多面体不满足欧拉公式,则它一定不是简单多面体; • 但满足欧拉公式的多面体不一定是简单多面体。 • 带悬挂面的立方体同样满足欧拉公式,但它却不是简单多面体,也不是一个实体。 • 由此例可以看出,为了检验一个具有多边形表面的体是不是简单多面体,除要验证欧拉公式外,还得附加一些条件。 • 如:每条边连接两个顶点;每条边只被两个面共享;每个顶点至少被三条边共享。
v=4, e=6, f=4 v=24, e=36, f=15, r=3, s=1, h=1 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 简单欧拉检测 ◘ 广义欧拉公式 ◘ 边界的表示 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 广义欧拉公式 • 非简单多面体满足下面的广义欧拉公式: v-e+f-r=2(s-h),其中: • v,e,f含义与前面一样; • r为多面体表面上孔的个数; • h为贯穿多面体的孔洞的个数; • s为相互分离的多面体数。 • 与前述一样,广义欧拉公式仍然是检查一个具有多边形表面的体是否为实体的必要条件。 • 欧拉公式同样适用于表面由曲面片组成的多面体。
最简单的边界表示方法是将多面体表示成构成其边界的一列多边形,每个多边形又由一列顶点坐标来表示。最简单的边界表示方法是将多面体表示成构成其边界的一列多边形,每个多边形又由一列顶点坐标来表示。 为反映多边形的朝向,将其顶点统一按逆时针(或顺时针)排列。(即前面的多边形表示) 这样必须保存所有多边形的每个顶点会浪费存储空间。 假如只保存每个多边形各顶点的序号(索引值),而将所有顶点存放于一个数组中可避免这种浪费。 在这种表示中,边的信息是隐含的,即多边形顶点序列中相邻两个顶点构成其一条边。 也就是说,这种数据结构中所包含的多面体边界的拓扑信息不完整,使得对多面体的操作效率不高。 例如,需遍历包含某条边的所有多边形才能确定哪两个多边形共享该边。 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 边界的表示 ◘ 边界数据结构 ◘ 半边数据结构 ◘ 体数据结构 ◘ 面环数据结构 ◘ 边数据结构 ◘ 顶点数据结构 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 边界的表示方法
边界表示的数据结构必须同时正确、完整地表示出边界的几何信息和拓扑信息。边界表示的数据结构必须同时正确、完整地表示出边界的几何信息和拓扑信息。 多面体的拓扑关系可用九种不同的形式描述: v→{v}, v→{e}, v→{f}, e→{v}, e→{e}, e→{f}, f→{v}, f→{e}, f→{f}。 “→”表示数据结构中包含从左端元素指向右端元素的指针,表明可从左端元素直接找到右端元素。 每一种关系都可由其它关系通过适当的运算得到。 表示法中究竟采用哪种拓扑关系或关系的组合取决于边界表示所需支持的各种运算及存储空间的限制。 例如:若边界表示要支持从边查找共享该边多边形的运算,则数据结构中最好包括拓扑关系e→{f}。 数据结构中保存的拓扑关系越多,对多面体的操作越方便,但所占用的存储空间也越大。 要根据实际情况妥善选择拓扑关系,求得多方面的合理折衷,提高系统的整体效率。 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 边界的表示 ◘ 边界数据结构 ◘ 半边数据结构 ◘ 体数据结构 ◘ 面环数据结构 ◘ 边数据结构 ◘ 顶点数据结构 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 边界表示的数据结构
边 v2 v2 右半边 左半边 左环 右环 v1 v1 多边形 prevs nexts sfaces fsolid prevf 面 nextf floops lface 环 prevl nextl ledge wloop prv nxt 半边 vtx vedge prevv nextv 顶点 ☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 边界的表示 ◘ 边界数据结构 ◘ 半边数据结构 ◘ 体数据结构 ◘ 面环数据结构 ◘ 边数据结构 ◘ 顶点数据结构 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 半边(翼边)数据结构 • 半边数据结构是边界表示的一种较为典型的数据结构。 • 在构成多面体的三要素(顶点、边与面)中,以边为核心。 • 为方便表达拓扑关系,它将一条边表示成拓扑意义上相反的两条“半边”,所以称为半边数据结构或翼边数据结构。 • 采用半边数据结构,多面体的边界表示的层次结构。 • 以半边数据结构为基础的多面体的边界表示中包含了多种拓扑关系,可以方便地查找各元素之间的连接关系。 • 这种表示中存储的信息量大,需要较多的存储空间,但却获得了较快的处理速度。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 边界的表示 ◘ 边界数据结构 ◘ 半边数据结构 ◘ 体数据结构 ◘ 面环数据结构 ◘ 边数据结构 ◘ 顶点数据结构 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 多面体数据结构 • 多面体的数据结构 struct solid{ Id solidno; /* 多面体序号 */ Face *sfaces;/* 指向多面体面 */ Edge *sedges;/* 指向多面体边 */ Vertex *sverts;/* 指向多面体顶点 */ Solid *nexts; /* 指向后一个多面体 */ Solid *prevs; /* 指向前一个多面体 */ }; • 多面体是整个数据结构最上层的节点, • 在任何时候,都可以通过连接各节点的双向指针遍历(查找)构成多面体边界的面、边、顶点等元素。 • 系统中也许会同时存在多个体,它们通过指针pervs与nexts连接起来。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 边界的表示 ◘ 边界数据结构 ◘ 半边数据结构 ◘ 体数据结构 ◘ 面环数据结构 ◘ 边数据结构 ◘ 顶点数据结构 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 面和环的数据结构 • 面结构表示了多面体表面的一个平面多边形。 • struct face{ Id faceno; /* 面的序号 */ • Solid *fsolid; /* 指向面所属多面体 */ • Loop *floops; /* 指向构成面的环 */ • Vector feq; /* 平面方程 */ • Face *nextf; /* 指向后一个面 */ • Face *prevf; /* 指向前一个面 */ }; • 多边形所在平面的方程为:feq[0]·x+feq[1]·y+ feq[2]·z+ feq[3]=0,它的边界由一系列环构成,floops指向其外环。 • 环结构表示 • struct face{ HalfEdge *ledge; /*指向构成环的半边*/ • Face *lface; /* 指向该环所属的面 */ • Loop *nextl; /* 指向后一个环 */ • Loop *prevl; /* 指向前一个环 */}; • 一个环由多条半边组成,环的走向是一定的,若规定一个面的外环为逆时针走向,则其内环为顺时针走向,反之亦然。
☆几何造型基础 ● 实体的定义 ● 几何模型定义 ☆实体表示方法 ● 多边形面表示 ● 特征表示方法 ● 空间分割表示 ● 推移表示方法 ● 边界表示方法 ◘ 欧拉公式 ◘ 边界的表示 ◘ 边界数据结构 ◘ 半边数据结构 ◘ 体数据结构 ◘ 面环数据结构 ◘ 边数据结构 ◘ 顶点数据结构 ◘ 欧拉运算 ◘ 正则集合运算 ● 构造几何实体 ☆实体表示比较 边的数据结构 • 边的数据结构 • struct edge{ Id edgeno; /* 面的序号 */ • HalfEdge *he1;/* 指向左半边 */ • HalfEdge *he2;/* 指向右半边 */ • Edge *nexte; /* 指向后一条边 */ • Edge *preve; /* 指向前一条边 */ }; • 一条边分为拓扑意义上方向相反的两条边。 • 在多面体边界表示中保存边的信息是为了方便对多面体以线框形式进行显示处理。 • 半边的数据结构 • struct halfedge{ Edge *edge; /* 指向半边的父边 */ • Vertex *vtx; /* 指向半边的起始点 */ • Loop *wloop; /* 指向半边所属环 */ • HalfEdge *nxt; /* 指向后一条半边 */ • HalfEdge *prv; /* 指向前一条半边 */ }; • 半边是整个数据结构的核心,首尾相连的半边组成一个环, • 通过指针edge可访问与该半边同属一条边的另一条边。