图形的层次结构
next指针指向下一个块结构,通过它可以将该块及块中所涉及子块连接在一 起。
块的实例
3. 块的实例 class Instance public Element{ Block *pt;
float dx, dy, rax,ray, sx, sy;
}
把块的实例放在图中(所在的高层的块)的不同位置,这相对 于世界坐标系来讲是一个平移变换; 同一个块在不同位置的实例其大小、方向和位置可以不同; 因此要在世界坐标变换基础上作一个局部的变换,这种局部 变换就是我们第四章讲的变换。
}
图形结构块
2. 图形结构块
class Block public Element{ char * name; CElement **eList; Block *next; void draw(){….} }
图形结构块是由多个直线段、圆弧等基本图形元素和多个块的实例组成 的,由基本元素和块实例形成的块又可以借助于块实例成为高层块的组成 部分,形成一个嵌套结构,当然最底层的块只能由基本图形元素组成。 eList用来保存构成块的所有基本图形元素和块实例的对象指针,它可以 是一个动态数组,也可以用链表等线性表结构实现。绘制图块时,遍历线性 表中的所有对象,调用对象的draw()方法就可以完成整个块的绘制。 类Block中的name用来保存块的名字,可用于标识块,当然也可以根据具体 的应用附加其他的属性进行扩充。
图形层次结构的组成部分
几何及其他附属属性
物体及组成物体的基本元素的几何属性和其他影响外表 的属性,如颜色、线形和线宽等。 拓扑关系 物体及基本元素之间的拓扑关系,拓扑关系可以用树 结构或邻接矩阵表示,也可由其内在的几何定义表示。
特定的图形结构,用来表示一些特定的属性。 与物体及基本元素相对应的数据值和属性,如电子文本和描 述文字。
实例:逻辑电路图设计中的层次结构
图5.1 由门电路组成的逻辑电路 在该结构中,与门、非门及或门电路是基本电路,分别由不同的基本图素 线段及圆弧构成。 可把与门、非门及或门组织成三个块, 任何逻辑图便可利用这三个块和基本元素根据实际组合来构成。 同一个块可以有不同的实例,这些实例在图中的位置,大小和方向都可以 不同。 这些门电路可以组成一些基本电路块(如触发器),而逻辑电路又由这些 基本电路块及门电路块组成,这样便形成了一个多层的层次结构。
自底向上的设计方法
图形结构常常是层次的 计算机硬件结构图是由很多诸如运算器、控制器及存储器部 件等部件组成的,每一部件又由一些标准的单元电路、门电路 及触发器组成。 图形设计时,往往用自底向上的方法设计复杂的层次结构图 首先由基本的图形元素如线、圆弧等构建形成门、窗和楼梯 (高一层的图素), 再由直线段、圆弧等基本元素和门、窗、楼梯等高一层的图 素形成房间和层等更高一层的结构, 最后组成一栋楼房, 这些高层图素一般称为块(block)或子图。 只要在图形结构中存在结构相同的部分,而这些部分又在图 形结构中出现多次,就可把这样的部分组成块。
块的实例
一般把块的中心放在坐标原点,通过局部变 换产生放在不同位置及不同大小方向的实例
实例
与 非 与 或
层次结构的优点
利用了层次结构最主要的好处是可以将一
组相关的图素组织在一起,进行整体的插入、
删除、移动和放缩等操作。 由于在图中一个块虽在图中多处出现,但它
的几何及拓扑信息是相同的,因此只需保存
一次,所以可以节省大量的内存。
5.2 面向对象的层次结构的实现
利用面向对象的程序设计类的继承特性,可以很好地实现图 形的层次结构,下面讨论层次结构的具体表示和相关的操作。 通过对已有对象进行增加或部分修改的方法建立新的对象, 对已有对象可以增加数据和过程,也可以对其中某些过程进 行从新定义。 最初的类被称为基类,从基类扩展出来的类称为派生类。 这样,我们可以采用对象派生的方法建立一个有层次的对外
class Element { UINT nType; void draw(); boolean select(x,y); modify(); delete(); void setColor(int color); int getColor(); } } class Circle public Element { float xc, yc, xs, ys, xe, ye; void draw(){….} void draw(){ glBegin(GL_LINES); glVertex2f (x0,y0); glVertex2f (x1,y1); glEnd(); }
部世界的描述
5.2.1 面向对象的层次结构表示
将结构中的基本图素定义为类,并定义相应的数 据和方法来实现基本图素,基本图素的类又可以 通过对其增加和更新形成更高一层的图形部件
用类Line, Circle …等 来描述直线段、圆弧等基 本图形元素,它们是构成 层次结构中块的最基本的 元素。可以将OpenGL的函 class Line: public Element{float x0, y0, x1, y1; 数嵌入以实现Line类的 void draw(){….} draw()函数。
五 图形的层次结构
现实世界中的客观对象都有一定的组织结构,
用图形学来描绘实际的对象需要确定一定的图
形结构(几何模型)
现实中的对象往往有层次结构,描述这些对象 的图形结构也是层次的 利用层次 本章给出了几种常见的图形层次结构,包括 PHIGS结构和许多应用系统中常用的面向对象的 层次结构。
5.1 图形的层次结构概述
基本概念:
图形结构
也称为几何模型,是由具有明确几何定义的元素,如点、线、面 等及其相互间连接关系组成。 基本图素 点、线、面等称为基本图素/图元,
基本图素之间的连接关系称为拓扑关系。
在层次结构中,由基本元素构成的对象可用来构成更复杂的对象, 这类对象也称为基本元素。