




免费预览已结束,剩余40页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I 科学数据可视化操作算法设计分析科学数据可视化操作算法设计分析 摘要摘要 随着科学数据可视化技术在各领域内的广泛应用 出现了相当数量的科学 数据可视库供开发者进行二次开发 例如 OpenGL IDL PGL 等 这些库提供 了强大的图形生成功能 本论文利用了 PGL 库并进行了二次开发 而且加强了 它的功能 使在可视化操作时更为方便简单 本文在对科学数据可视化的基本概念简单介绍后 还介绍了实现可视化操 作的一些具体算法 如 构造一个可视化区域算法 构造一个坐标轴算法 将 科学数据转换成图形对象算法 选择移动图形对象算法等 同时 为检验算法 的正确性 用 Visual C 开发了一个科学数据可视化演示系统 经演示系统测 试 这些算法运行效率较好 本文所设计的算法 以类库的形式提供给其他开发者直接使用或做进一步 的完善 关键字关键字 科学数据 MFC 可视化 面像对象设计 STL BOOST PGL II Abstract With the wide application of technology of Scientific Data Visualization in many fields there are some good libraries such as OpenGL IDL and PGL which can make it easy for developers to carry out their development These libraries have strong process functions that make an object of image with Scientific Data The thesis use the libraries of PGL to development software of Scientific Data Visualization and make the software use comfortably and have a strong function After simply introducing the basic concept of Scientific Data Visualization many algorithms and their characteristics have been analyzed in detail such as building a region of visualization an axe a solution to change scientific data to a graphical object and selecting and moving graphical object by mouse etc In order to test the exactness and effective of those algorithms an image process demonstration system has been developed by means of using STL and BOOST libraries and the results have demonstrated that these algorithms especially in efficiency of operation of Visualization have many advantages Designed algorithms in this thesis are offered other developers to use or do further perfection in the form of Class library directly Key words Scientific Data MFC Visualization Object oriented design STL BOOST PGL 目目 录录 摘要摘要 I ABSTRACT II 第第 1 章章 绪绪 论论 1 1 1 什么是科学数据可视化 1 1 2 发展概况及应用领域 1 1 3 科学数据可视化主要研究的内容 2 1 4 本论文的目的及主要内容 3 第第 2 章章基础知识基础知识 4 2 1 STL 简介 4 2 1 1 STL 算法 4 2 1 2 STL 容器 5 2 1 3 STL 迭代器 6 2 2 BOOST 简介 6 第第 3 章章科学数据可视化的概述科学数据可视化的概述 8 3 1 科学数据可视化的基本概念 8 3 1 1 科学数据 8 3 1 2 可视化 8 3 1 3 科学数据可视化的原理概述 8 3 2 科学数据可视化的表示模型 9 3 2 1 科学数据模型 10 3 2 2 坐标轴模型 10 3 2 3 图形图像模型 11 3 3 科学数据可视化的发展趋势 11 第第 4 章章科学数据可视化总体的设计科学数据可视化总体的设计 13 4 1 科学数据可视化的类包设计 13 XII 4 2 科学数据可视化设计中使用的数据结构 14 4 2 1 Vector 结构 14 4 2 2 Shared ptr 结构 16 第第 5 章章 科学数据可视化的主要类及算法描述科学数据可视化的主要类及算法描述 17 5 1 CPGLREGION类 18 5 2 CPGLOBJECT类 20 5 3 CPGLAXE2D 类 22 5 4 CPGLVECTOR类 24 5 5 CPGLLINE2D 类 25 第第 6 章章 科学数据可视化的具体实现科学数据可视化的具体实现 26 6 1 科学数据的组织 26 6 2 科学数据到图形对象的转换 26 6 3 将图形对象的添加到 REGION 27 6 4 实现图形可视化操作 27 6 4 实现图形视图的导出 32 第第 7 章章 演示系统演示系统 34 6 1 主要功能运行实例 35 6 2 系统主要特点 39 第第 7 章章 结束语结束语 40 参考文献参考文献 41 湖南师范大学本科毕业论文 1 第第 1 章章 绪绪 论论 1 1 什么是科学数据可视化什么是科学数据可视化 现代的科学数据可视化 Scientific Data Visualization 技术指的是运用计算 机图形学和图像处理技术 将数据换为图形或图像在屏幕上显示出来 并进行交互 处理的理论 方法和技术 它涉及到计算机图形学 图像处理 计算机辅助设 计 计算机视觉及人机交互技术等多个领域 数据可视化概念首先来自科学计 算可视化 Visualization in Scientific Computing 科学家们不仅需要通过图形 图像来分析由计算机算出的数据 而且需要了解在计算过程中数据的变化 随 着计算机技术的发展 数据可视化概念已大大扩展 它不仅包括科学计算数据 的可视化 而且包括工程数据和测量数据的可视化 学术界常把这种空间数据的 可视化称为可视化 Volume Visualization 技术 1 1 2 发展概况及应用领域发展概况及应用领域 近年来 随着网络技术和电子商务的发展 对科学数据的研究提出了更高 的要求 科学数据可视化技术随之发展起来 我们可以通过数据可视化技术 发现大量金融 通信和商业数据中隐含的规律 从而为决策提供依据 这已成 为数据可视化技术中新的热点 为适应硬件平台 操作系统 网络和通信方面 的飞速发展 可视化的软件产品在近几年中发展很快 其中以 AVS Express 开发 版 IDL 包括 VIP ION 和 PV WAVE 等为代表 科学数据可视化的应用十分广泛 几乎可以应用于自然科学 工程技术 金 融 通信和商业等各种领域在国民经济中发挥着越来越大的作用 其中数据可 视化主要应用在以下几个领域 医学 医学数据的可视化 已成为科学数据可视化领域中最为活跃的研究领域之 一 由于近代非侵入诊断技术如 CT MRI 和正电子放射断层扫描 PET 的发 展 医生已经可以较易获得病人有关部位的一组二维断层图象 油气勘探 第 1 章 绪 论 2 由于地震数据及测井数据的数据量极其庞大 而且分布不均匀 因而无法 根据纸面上的数据作出分析 利用可视化技术可以从大量的地质勘探数据或测 井数据中 构造出感兴趣的等值面 等值线 并显示其范围及走向 并用不同 颜色显示出多种参数及其 相互关系 从而使专业人员能对原始数据做出正确解 释 得到矿藏是否存在 矿藏位置及储量大小等重要信息 气象预报 科学数据可视化可将大量的数据转换为图像 在屏幕上显示出某一时刻的 等压面 等温面 旋涡 云层的位置及运动 暴雨区的位置及其强度 风力的 大小及方向等 使预报人员能对未来的天气做出准确的分析和预测 工程 计算机辅助工程 CAE 包括计算机辅助设计 CAD 计算机辅助制造 CAM 和计算机辅助运行等多项内容 可视化技术有助于整个工程过程一体 化和流程化 并能使工程的领导和技术人员看到和了解过程中参数变化对整体 的动态影响 从而达到缩短研制周期 节省工程全寿命费用的目的 1 3 科学数据可视化主要研究的内容科学数据可视化主要研究的内容 科学数据可视化研究的主要内容包含以下几个方面 科学数据的组织 对科学数据进行合理的收集 人们使用特定的工具 如数据采集器等 对数据进行采样分析 将收集的信息进行过滤获取感兴趣 的部分 实时图形生成技术 将科学数据转化成图形 可使在分析科学数据时 提供界面友好图形信息 支持各种鼠标操作 通过对科学数据图形化可使操作 者有一种感观上的了解 从而更好的分析数据 发现数据的规律并做出正确的 判断 实时图形生成技术主要有 二维图形区域实时图形生成技术 三维数据 模型实时生成技术 三维视角变换技术 数据模型的显示和快速漫游数据技术 科学数据的存储和压缩 通常由于科学数据的数据量比较大 运用合 理有效的存储压缩算法可提高磁盘的利用率并提高科学数据使用效率 数据可视化工具的开发 研究开发数据可视化工具并使其支持科学数 湖南师范大学本科毕业论文 3 据的导入 导出 图形化等操作 数据可视化算法研究 对科学数据图形生成 存储压缩的算法研究 科学数据检索系统 对科学数据进行分析找出有用的 可利用的信息 1 4 本论文的目的及主要内容本论文的目的及主要内容 本论文的目的是 在首先选用合理的数据结构组织好科学数据 再通过分 析数据的图形生成技术和常用图形生成算法思想的基础上 然后使用 Visual C 这个软件开发工具以完全面向对象的开发模式设计出了一套科学数据可视 化的工具 最后以类和控件的形式提供给其他开发者直接使用或做进一步的完 善 本论文的主要内容包含如下几个方面 对 C 所提供的常用的数据结构进行简单的描述和解释 为科学数据生 成图算法的设计打下基础 科学数据图形生成算法的介绍 将科学数据以矩阵形式的文件格式存储 在计算机的存储器中的 本论文以矩阵转换成多条曲线图形的算法为例并结合 上述的数据结构 并对它们之间的转换给出了算法描述 数据可视化工具的开发算法的介绍 可视区域的显示范围 可视区域的 放大和缩小 可视区域的移动 可视区域中图形曲线的选中 可视区域中图形 曲线的移动以及可视区域的恢复等给出了详细的讨论及算法描述 数据可视化图形导出文件格式介绍 BMP 文件格式 JPEG 文件格式 TIFF 文件格式 PNG 文件格式 EMF 文件格式 EPS 文件格式 SVG 文件 格式以及 SVGZ 文件格式 第 2 章 基础知识 4 第第 2 章章基础知识基础知识 由于在科学数据可视化开发时引用到了许多 STL 库 BOOST 库中的内容特 此对它们进行一下总体概述 2 1 STL 简介简介 2 STL Standard Template Library 标准模板库 是惠普实验室开发的一系 列软件的统称 它是由 Alexander Stepanov Meng Lee 和 David R Musser 在惠 普实验室工作时所开发出来的 现在虽说它主要出现在 C 中 但在被引入 C 之前该技术就已经存在了很长的一段时间 STL 的代码从广义上讲分为三类 algorithm 算法 container 容器 和 iterator 迭代器 几乎所有的代码都采用了模板类和模版函数的方式 这 相比于传统的由函数和类组成的库来说提供了更好的代码重用机会 在 C 标 准中 STL 被组织为下面的 13 个头文件 和 以下笔者就简单 介绍一下 STL 各个部分的主要特点 2 1 1 STL 算法算法 算法是大家都能取得的一个共识是函数库 对数据类型的选择对其可重用 性起着至关重要的作用 举例来说 一个求方根的函数 在使用浮点数作为其 参数类型的情况下的可重用性肯定比使用整型作为它的参数类性要高 而 C 通过模板的机制允许推迟对某些类型的选择 直到真正想使用模板或者说对模 板进行特化的时候 STL 就利用了这一点提供了相当多的有用算法 它是在一 个有效的框架中完成这些算法的 可以将所有的类型划分为少数的几类 然 后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型 STL 提供了大约 100 个实现算法的模版函数 比如算法 for each 将为指定 序列中的每一个元素调用指定的函数 stable sort 以你所指定的规则对序列进行 稳定性排序等等 这样一来 只要我们熟悉了 STL 之后 许多代码可以被大大 的化简 只需要通过调用一两个算法模板 就可以完成所需要的功能并大大地 提升效率 湖南师范大学本科毕业论文 5 算法部分主要由头文件 和组成 是所有 STL 头文件中最大的一个 尽管它很好理解 它是由一大 堆模版函数组成的 可以认为每个函数在很大程度上都是独立的 其中常用到 的功能范围涉及到比较 交换 查找 遍历操作 复制 修改 移除 反转 排序 合并等等 体积很小 只包括几个在序列上面进行简单数学运 算的模板函数 包括加法和乘法在序列上的一些操作 中则定义了 一些模板类 用以声明函数对象 2 1 2 STL 容器容器 在实际的开发过程中 数据结构本身的重要性不会逊色于操作于数据结构 的算法的重要性 当程序中存在着对时间要求很高的部分时 数据结构的选择 就显得更加重要 经典的数据结构数量有限 但是我们常常重复着一些为了实现向量 链表 等结构而编写的代码 这些代码都十分相似 只是为了适应不同数据的变化而 在细节上有所出入 STL 容器就为我们提供了这样的方便 它允许我们重复利 用已有的实现构造自己的特定类型下的数据结构 通过设置一些模版类 STL 容器对最常用的数据结构提供了支持 这些模板的参数允许我们指定容器中元 素的数据类型 可以将我们许多重复而乏味的工作简化 容器部分主要由头文件 和 组成 容器和相应头文件的对应关系如表 2 1 数据结构描述实现头文件 向量 vector 连续存储的元素 列表 list 由节点组成的双向链表 每个结点包含着一个元 素 双队列 deque 连续存储的指向不同元素的指针所组成的数组 集合 set 由节点组成的红黑树 每个节点都包含着一个元 素 节点之间以某种作用于元素对的谓词排列 没有两个不同的元素能够拥有相同的次序 第 2 章 基础知识 6 多重集合 multiset 允许存在两个次序相等的元素的集合 栈 stack 后进先出的值的排列 队列 queue 先进先出的执的排列 优先队列 priority queue 元素的次序是由作用于所存储的值对上的某种谓 词决定的的一种队列 映射 map 由 键 值 对组成的集合 以某种作用于键对上 的谓词排列 多重映射 multimap 允许键对有相等的次序的映射 表 2 1 容器和相应头文件的对应关系表 2 1 3 STL 迭代器迭代器 迭代器从作用上来说是最基本的部分 软件设计有一个基本原则 所有的 问题都可以通过引进一个间接层来简化 这种简化在 STL 中就是用迭代器来完 成的 概括来说 迭代器在 STL 中用来将算法和容器联系起来 起着一种黏和 剂的作用 几乎 STL 提供的所有算法都是通过迭代器存取元素序列进行工作的 每一个容器都定义了其本身所专有的迭代器 用以存取容器中的元素 迭代器部分主要由头文件 和组成 是 一个很小的头文件 它包括了贯穿使用在 STL 中的几个模板的声明 中提供了迭代器使用的许多方法 而对于的描述则十分的困难 它以 不同寻常的方式为容器中的元素分配存储空间 同时也为某些算法执行期间产 生的临时对象提供机制 中的主要部分是模板类 allocator 它负责产生 所有容器中的默认分配器 2 2 BOOST 简介简介 3 Boost 一套开放源代码 高度可移植的 C 库 出自于 C 标准委员会库工 作组 它的功能如下 正则表达式 可以与 POSIX API 和 Perl 语言处理正则表达式的功能相媲 美 而且还能支持各种字符类型 如 char wchar t 甚至还可以是自定 湖南师范大学本科毕业论文 7 义字符类型 多线程 可实现跨平台的多线程库 数据结构方面除了 STL 中的数据结构再加上即将加入标准的 hash set hash map hash multiset hash multimap 等 使 C 对数据结 构的支持已近完备 python 对 Python 语言的支持 智能指针 与 std auto ptr 一起善加使用 可杜绝内存泄露 更有循环冗余的 CRC 可轻松定义返回多个值函数的元组 tuple 可容纳 不同类型值的 any 对标准库各方面的补充 还在迅速扩大中 部分内容有望进入 C 标准库 第 3 章 科学数据可视化的概述 8 第第 3 章章科学数据可视化的概述科学数据可视化的概述 3 1 科学数据可视化的基本概念科学数据可视化的基本概念 3 1 1 科学数据科学数据 中国工程院院士 我国著名农业与资源环境信息工程专家孙九林院士对科 学数据的定义如下 科学数据资源 是人类长期以来智慧的结晶 是信息与 知识创新的源泉 提高人们生活质量的保证 推动社会发展的重要条件 然而 只有对它实现有效的开发 管理 利用 建立起完善的共享 服务机制 充分 发挥科学数据的科学价值 经济价值和社会价值 才能确保科技的 第一生产 力 地位 4 3 1 2 可视化可视化 可视化是帮助人们表现数据或挖掘数据隐含信息的手段 目的是辅助人们 得出某种结论性观点 因此 可视化技术通常用在解决问题的后期阶段 并且 需要以数据采集和处理技术为基础 没有采集技术 可视化技术就无从谈起 没有可视化技术 采集来的数据得不到很好的应用 它们是相辅相成的 3 1 3 科学数据可视化的原理概述科学数据可视化的原理概述 科学数据可视化是指运用计算机图形学和图像处理技术将科学计算过程中 产生的数据和计算结果转换为图形或图像在屏幕上显示出来 并进行交互处理 的理论 方法和技术 其研究的核心问题是将数据变成图像 使繁多枯燥的科 学数据变得更加直观 易于理解 由于从事科学数据可视化研究的一般需要高性能计算机 高档工作站 高 速网络和虚拟现实环境 这些都需要巨额的投资 而作为一般单位很难具备这 样的条件 因此从事这一研究的单位寥寥无几 所以感觉科学数据可视化离我 们比较远 不过 科学数据可视化的运用对我们并不陌生 气象预报中的卫星 云图的变换就是我们经常可以看到的科学数据可视化的例子 从事科学数据可 视化的研究最主要是从事可视化处理的研究 可视化处理的研究就是包括对将 湖南师范大学本科毕业论文 9 科学数据转化成为二维 三维的图形或图像信息 并可以人为对其进行加工以 满足人的视觉心理或应用需求的行为 科学数据可视化就是利用数字计算机或其他数字硬件 对从数据信息进行 采集经过数据可视化处理转换而得的图形 图像将其在显示设备上显示 这样 可以帮助技术人员形象直观地查看仿真结果 而且在一定程度上可以提高设计 水平 减少错误的发生 因此计算机图形技术将在各行业 各个领域内得到越 来越广泛地应用 科学数据可视化的原理如图 3 1 所示 图 3 1 科学数据可视化原理图 3 2 科学数据可视化的表示模型科学数据可视化的表示模型 在进行具体科学数据可视化的开发之前 首先对科学数据可视化的表示模 型是十分必要的 它可以帮助我们建立起正确的数据可视化的概念 这样才能 正确地进行开发研究 否则就会走弯路 甚至事倍功半 科学数据可视化的表示模型可以分为三个部分 如图 3 2 所示 图 3 2 科学数据可视化的表示模型 其中 科学数据是科学数据可视化的基础 有了科学数据才能确定坐标轴 第 3 章 科学数据可视化的概述 10 模型的显示范围 也才能确定图形 图像是显示一什么样的东西 是一个点 一条直线 一个平面图形图像还是一个三维图形图像 当科学数据模型和坐标 轴模型都确定之后 这样图形图像的位置也将可以确定下来 3 2 1 科学数据模型科学数据模型 科学数据模型定义某学科的科学数据及其它们之间的关系 并通过一种 通用语言和一个信息的公共结构 为科学数据理解提供一个公共的基础 以便 描述所采集的数据 用于计算机系统的开发 定义数据库和进行数据转换 因此 科学数据模型由相应学科的要素 实体 和这些要素的特征 属性 组成 并用 E R 图来描述数据模型的实体关系 如面向 GIS 地学的科学数据模型是由地学要素 实体和点 线 面三个实体综合表示地学空间的模型 它可以用图层和相应的 属性描述 层是用以区分空间实体的类别 即属性一致的地理实体或特征相同 的地理因子在空间分布的集合 目的是为了制图 显示 管理和分析 3 2 2 坐标轴模型坐标轴模型 由于要使用二维的屏幕来描述二维或三维的图形 图像 这时可以利用坐 标轴模型来实现在二维的屏幕上实现三维交互 简单地说只要可以准确的确定 从逻辑坐标值到设备坐标值的转换方式 就可以实现在二维的屏幕上实现三维 交互 如果需要表示一个二维图形时 就构造一个二维坐标轴 如图 3 3 所示 图 3 3 二维坐标模型 如果需要表示一个三维图形 图像时 就构造一个三维坐标轴 如图 3 4 所示 湖南师范大学本科毕业论文 11 图 3 4 三维坐标模型 随着坐标轴的各个轴的单位量的参数的变化坐标轴能表现的图形图像也就 可以随之变化 如整个坐标轴的移动 坐标轴轴距的变换等 3 2 3 图形图像模型图形图像模型 图形图像模型是科学数据可视化的最高层 它是用于来表现科学数据的特 征 用来描述科学数据之间的关系 用来对科学数据进行整理 用来发现科学 数据的规律等 图形图像模型与坐标轴模型相结合可以构成可视化平台 在可视化平台上 可以进行多种变换操作这样就能够得到操作者所需要的图形图像 如改变坐标 值的位置 图形图像也随之改变 这样可以切换用户视角 改变坐标值的轴距 图形图像就随之拉伸 缩放 这样就实现了图形图像的放大和缩小等 3 3 科学数据可视化的发展趋势科学数据可视化的发展趋势 科学数据对我们的科学研究工作有很大的辅助作用 现在的科学计算的数 据量可谓是呈几何级数增长 如果没有科学数据可视化技术 人们很难从一大 堆枯燥乏味的数字中找出其内在规律和变化趋势 科学数据可视化在现实生活 中的应用领域更是举足轻重 直接关系到国计民生 例如在核武器研究领域 我国已经加入了核禁试条约 不能再做物理的原子弹爆炸实验了 但是有关核 弹的研究与制造工作还得进行 这就需要在计算机上进行数学模拟 并用科学 数据可视化技术显示其结果 此外还有石油勘探领域 通过科学计算可视化技 术可以依据勘探的数据绘制出地下的石油分布图 在气象预报领域 科学计算 可视化能在繁多的数据中总结出风云变幻的趋势 其次 采用科学数据可视化 第 3 章 科学数据可视化的概述 12 技术进行模拟实验可以节省大量经费 例如空气动力学的有些实验需要造一个 巨大的风洞 风洞开动起来的时候 整个城市的电力都得供给它做物理实验 而在计算机上采用科学数据可视化技术就可以对空气动力学进行模拟 在飞机 轮船制造业中要求飞机轮船外形的阻力要小 如果是做实际模型 阻力大时就 要对模型进行改动 需要耗费大量的经费 而在计算机上则可以轻而易举地实 现 第三 在教育领域使用科学数据可视化技术可以使教学更直观 更生动 更利于学生理解 例如医学院学生学习解剖 就可以在计算机上做模拟手术 由此可见科学数据可视化的重要性 5 湖南师范大学本科毕业论文 13 第第 4 章章科学数据可视化总体的设计科学数据可视化总体的设计 科学数据可视化软件需要快速的显示图形 进行大量的科学计算所以对 代码的执行效率的要求比较高 在开发过程中我采用 VC 这个高效的开发工 具进行开发 并采用 C 语言 STL 中提供的多项数据结构 同时还运用了 BOOST 库 PGL 库 GUILIB 库用来实现垃圾自动回收 高效的图形显示和精 美的用户操作界面 科学数据可视化的总体流程图如图 4 1 图 4 1 系统整体流程图 4 1 科学数据可视化的类包设计科学数据可视化的类包设计 由于科学数据可视化属于一个比较大的系统 在开发系统时 将系统按照 功能分为五个小系统 除最后一个演示子系统生成 EXE 可执行文件外 其它子 系统都生成一个动态链接库 DLL 文件 使之确保程序的可重用性 下面简要的 介绍科学数据可视化系统的五大类包 在屏幕上快速显示图形对象的类包 该类包封装了 GDI 具有强大的 第 4 章 科学数据可视化的设计与实现 14 图形显示和图形导出功能 由科学数据转化成图形对象的类包 该类包封装了大量的数组 向量 的数据结构 还包含了许多如显示区域 坐标轴 曲线的等多种类 支持 MFC 的图形对象显示类包 为了能充分发挥 VC 的性能 更好 的美化科学数据可视化操作界面 用桌面运用程序的式样来演示科学数据可视 化 用科学数据可视化的数据封装在派生的 MFC 库类中 派生出一套 MFC 类 使之支持科学数据可视化 具体的派生图请参见图 4 2 图 4 2 MFC 派生图 图形界面类包 用于开发出类似于 VS net 的界面 科学数据可视化的演示类包 用来演示系统功能的类包 和 大类包是在 PGL 库的基础上进行二次开发 使其功能更加强 大和稳定 4 2 科学数据可视化设计中使用的数据结构科学数据可视化设计中使用的数据结构 在科学数据可视化的设计中除了使用到了一些基本的数据结构还大量动用 了一些比较复杂的数据结构 如引用 C STL 中的 Vector Map 等 BOOST 中的 Shared ptr 等 4 2 1 Vector 结构结构 由于考虑到在设计时将会运用大量的矩阵信息 并且信息量不是唯一的 而是不断变化的 如一条曲线的有若干个点构成 又如一个二维的平面中又有 若干条曲线构成 所以就必须采用动态的数据结构 所以采用 Vector 结构是十 分合理的 在本论文第 2 章中提到 Vector 是 C STL 中容器的一个数据结构 它与 数组有很多相似的之处 但是数组只能保存固定大小的列表 而向量数据类型 湖南师范大学本科毕业论文 15 则提供了一种与 动态数组 相近的概念 从另一个角度来看它是一个模板类 用于管理任意类型的对象的动态数组 在解构时释放所管理的动态内存 可以 用于代替手工动态数组管理 Vector 的操作方法 它的实现头文件为 添加元素 void push back T const void insert iterator pos T const void insert iterator pos size t n T const template void insert iterator pos Iter first Iter last push back 是把一个元素添加到 vector 的末尾 insert 是把一个 t 或 n 个 t 或从 first 开始到 last 结束的一个序列插入到 pos 指示的位置之前 当插入元素后 size 将会大于 capacity 时 将引起自动存储分配 vector 将会分配一个比需要的存储区大若干倍 通常是 1 5 到 2 的新的存储区 把老 的元素拷贝过去 同时完成添加或插入 然后释放老的存储区 这就是说 vector 自动存储分配的空间大小是指数式增长的 这可以保证 多次添加元素到 vector 中时 平均用时是接近于常数的 删除元素 void erase iterator void erase iterator first iterator last void pop back void clear 这些函数分别删除一个 一串 最后一个 或全部元素 访问元素 以下成员函数 运算符用于访问 vector 中的一个元素 T T const T T const T 第 4 章 科学数据可视化的设计与实现 16 T const T T const 由于 vector 是一个 值 语义的对象 所有的操作函数都必须严格保证 const 的正确性 所以 所有的元素访问方法都有 const 和非 const 两个版本 4 2 2 Shared ptr 结构结构 由于在科学数据可视化时需要同时许多数据进行处理 而且有时由于视 角的变化 图形 图像对象经常需要创建和消亡 而且每一个对象所占用的存 储空间比较大 如果不及时处理将会使内存崩溃 所以必须要对消亡的对象所 占用的存储空间进行回收 这个时候如果能采用垃圾自动回收机制则是最理想 的解决方案 Boost 库中提供的 Shared ptr 结构可实现垃圾自动回收功能 Shared ptr 是一个智能指针 它采用的是 引用计数 reference counting 的原理 实现为每个对象保存指向它的指针数量 一旦这个数量降为 0 就将这个对象释放 意在用于对被指向对象的所有权进行共享 Shared ptr 符合 C 标准库的 可复制构造 CopyConstructible 和 可赋值 Assignable 要求 所以可被用于标准的库容器中 湖南师范大学本科毕业论文 17 第第 5 章章 科学数据可视化的主要类及算法描述科学数据可视化的主要类及算法描述 在各个子系统的开发过程中 严格遵守软件工程学理论和面向对象 OO 式 程序设计规则 选用可视化程度较高的 Micosoft Visual C 6 0 编程语言具体实 施 整个系统由各个相对独立的封装相关数据结构及相应实现方法的类组成 主要类的继承关系请参见图 5 1 图 5 1 科学数据可视化的主要类的继承关系图 第 5 章 科学数据可视化的主要类及算法描述 18 5 1 CPGLRegion 类 类 这个类是科学数据可视化的图形对象显示区域类 它在整个软件中有相 当重要的地位 它的设计思想是 可以用它来获取区域中的所有对象 在显示区域中添加或删除子区域 在显示区域中实现一个二维坐标轴 使显示区域可以实现更新操作 使显示区域放大 缩小 可以恢复区域并且可以进行移动 使显示区域可以添加 删除图形对象 这个是有由 PGL 图形库所提供的 并加以了二次开发 使之功能更大强 大和完善 CPGLRegion 的实现过程如下 实现 的算法为 在 CPGLRegion 加入 mObjects 的成员变量 设置它的 类型为一个新的对象管理类 CPGLObjectManager 并为每一个对象设定一个唯一 的 ID CPGLObjectManager 的实质上是封装了 C STL 中的 std list 和 BOOST 的 shared ptr可以实现 STL 的容器功能和当对象删除时自动 垃圾回收 加入一个对象 直接使用STL中Vector push back pObject 删除一个对象 if pObject return 在容器中进行查找对象ID Container iterator it it std find m objects begin m objects end pObject if it m objects end 对象删除 m objects erase it 查询一个对象 Container const iterator it for it m objects begin it m objects end it 湖南师范大学本科毕业论文 19 testing if object ID uID if it CheckID uID return true return false 使用上述功能即可实现对对象的管理功能 实现 和实现 的算法的十分相似 实现 是主要算法是构造一个二维坐标轴变量m axe 在构造Region之时就 构造它 当Region把所有图形对象都加入进来时 这时调用GetUnionExtent成员 函数得到Region的最大范围rExtent rExtent中有两组值 x y 左上角的点 x1 y1 右上角的点 GetUnionExtent是将每一个对象的最大范围进行比较得到一个最大 的 把rExtent来定义二维坐标轴的表示数据区域即可 实现 的算法用一个布尔型变量m bNeedUpdate来判断是事需要刷新Region 区域 在需要刷新时调用PlotGfx成员函数即可 实现 的算法是首先对需要对坐标轴进行缩放 然后对View进行缩放 如 果采用选定区域进行放大 首先对鼠标采样的两个点进行比较 按顺序进行排 列并调用PixelToWorldCoord成员函数实现视图坐标向逻辑坐标转换 将得到的 坐标来实现对坐标轴已及对View进行缩放 视图坐标向逻辑坐标转换的算法如下 iaxe为0是对X轴 为1是Y轴 switch iaxe case 0 ASSERT m iWidth 0 return m dLeft pix m iTx m dRight m dLeft m iWidth break case 1 ASSERT m iHeight 0 return m dTop pix m dTop m dBottom m iHeight 第 5 章 科学数据可视化的主要类及算法描述 20 break default return 0 实现 和实现 和实现 的算法差不多 将对象加入STL的list或者是从list 中删除 CPGLRegion作为科学数据可视化的核心类 在应用科学数据可视化时首 先应生成Region对象 并在里面添加科学数据生成的图形对象 能过添加坐标 轴和视图类可科学数据图形对象加以显示 最终形成可视化区域 通过 CPGLRegion类还可以得到Region中的任何一个图形对象 并可以对图形对象的 属性进行设置 以及放大 缩小等操作 5 2 CPGLObject 类 类 CPGLObject 类一个图形对象的类 它可以是一个点 一条线 一个坐标 轴还可以是一个说明性文字等 它的设计思想是 可以用它设置对象的名称和标识 ID 可以用它来设置对象的颜色 显示方式以及透明度 获取图形对象的最大宽度和长度 获取图形对象的是否有填充 CPGLRegion 的实现过程如下 成员变量 实现 的算法为 在 CPGLObject 加入 Cstring 类型的m sName 的成员变量 和继承一个自动管理 ID 的类 CPGLNode 这样可以通过m sName 在来设置对 象的名称 通过 CPGLNode 提供的成员函数 GetID 来设置对象 ID 设置对象的 ID 也是通过 STL 的 Container 来实现的 首先获得的 Region 中的 CPGLObjectManager 的对象 list 就可以得到 list 的大小 根据其大小值 如果它 为 0 则自动生成一个 ID 此 ID 为数据型 如果大小值不为 0 同 则在大小值 上使用替增序列可以设置一个独一无二的 ID 实现了 ID 就可以标识 就可以实现对 Region 进行操作时根据对象 ID 对单 个对象进行操作 湖南师范大学本科毕业论文 21 实现 的算法是加入几个成员变量对来实现对象的属性操作 如 加入一 个 CPGLColor类型m cColor的成员变量用来设置对象的颜色和透明度 CPGLColor类中将RGB颜色和透明度用一个一维数据丰装起来 这在一次操作 中就可以实现对颜色和透明度的设置 在该类中还使用枚举型定了多种颜色 这样就可以方便颜色的使用 为了能设置对象的显示方式在类中加入了 gfxinterface ELayer m eLayer 和bool m bVisible 的变量 前者用于设置图形对 象的显示层数 在显示图形对象时跟据层数的显示图形的位置 后者用于设置 图形对象是隐藏还是显示 在设置对象属性时 加入一个在这里采用STL中的pair和map的数据结构实 现用字符串来设置颜色属性 如设置颜色可以用SET COLOR RED 具体实 现如下 typedef std pair PropertyPair typedef std map PropertyMap 将字符串的属性设置转换成枚举的属性值 switch StringToObjectProp szProp case ObjectPropName SetName szValue return true case ObjectPropDescription SetDescription szValue return true case ObjectPropColor 将字符串的属性设置转换成颜色的枚举的属性值 SetColor CPGLColor StringToColor szValue return true case ObjectPropBrush 设置对象填充 ParseBrushFormat szValue return true 第 5 章 科学数据可视化的主要类及算法描述 22 case ObjectPropVisible Show tcsicmp szValue T on 0 tcsicmp szValue T true 0 return true case ObjectPropLayer if tcsicmp szValue T front 0 SetLayer LayerFront else if tcsicmp szValue T back 0 SetLayer LayerBack else if tcsicmp szValue T disable 0 SetLayer LayerDisabled return true default return false 实现 是主要算法是通过GetUnionExtent的成员函数来获取对象的最大范围 它是通过比较对象数据中的每一个值得到一个最大的值并存放在m rExtent变量 中 实现 的算法与实现 的算法基本相同 用一个CPGLBrushPtr 型变量 m pBrushFill来填充对象 5 3 CPGLAxe2D 类 类 CPGLAxe2D 类一个坐标轴类 用来在实现一个二维的坐标轴 它的设计 思想是 坐标的轴 X 轴和 Y 轴可以表示全体实数 坐标轴中可以绘制网格线 坐标轴的数值标注可以改变字体 显示角度 坐标轴的轴距可以放大和缩小 CPGLAxe2D 的实现过程如下 湖南师范大学本科毕业论文 23 实现 的算法是定义一个 double 型变量来表示坐标轴的数值标识 在 C double 型变量是八个字节 它表示的精度足以能够表示坐标轴的需要的精 度 实现 的算法是根据坐标轴的步长来定 类定义了一个步长的变量 坐标 轴的初始值 x y 是由 Region 中的最大范围 rExtent 变量的左上角点的 x 和右下 角的 y1 来确定 这时初始还通过取整处理 每加一个步长时画一条线 直到画 到 rExtent 右下角的 x1 和左上角的 y 即终值 步长的取法是通过终值与初值的 差再除上一个整数 再将其进行修正 通过初始值 步长和终值可以组成 Vector 向量组的坐标标注 数值型或日期型 实现 的算法是通过运用STL的vector来表示的 定义一个 std vector vStrings nLabels 变量用来描述标注 根据在 得到的向量组坐标进行循环 然后对每一个标注进行处理 坐标轴标注分两种 时间轴标注和数值型标注 时间型标注处理如下 得到总秒数 nsec m tsDt GetTotalSeconds secnow int floor x nsec N步长之后的秒数 dt COleDateTimeSpan secnow 24 3600 secnow 24 3600 3600 secnow 3600 60 secnow 60 curtime m tTimeLabelOrig dt 格式化时钟标注 str curtime Format m sTimeLabel 数值型的标注处理如下 当标注小于1000时的处理 str Format m pNumbers 0 GetDescription x dScale vPoints i x x vPoints i y y 第 5 章 科学数据可视化的主要类及算法描述 24 vStrings i str x m pSteps 0 maxStrLength 0 max maxStrLength 0 str GetLength 当标注大于1000时的处理 str Format T x10 d iScale vPoints resize nLabels 1 vStrings resize nLabels 1 vPoints nLabels x vPoints nLabels 1 x m pSteps 0 2 0 vPoints nLabels y y vStrings nLabels str 绘出坐标轴标注 设置其字体 m pNumbers 1 GetFont SetFontGfx gfx m pNumbers 1 CPGLObject PlotGfx gfx 设置式样和角度 gfx DrawTextStrip vPoints vStrings m pNumbers 1 GetAlign m pNumbers 1 GetAngle 实现 也就是实现对坐标轴的放大和缩小 只需要改变坐标轴的初始值和 终值就可以实现 5 4 CPGLVector 类 类 CPGLVector类是直接与科学数据相关的能方便使用它构造出一个图形对象 它的设计目的是构造一个科学数据与图形对象的接口 为了使这个类能支持更 多的数据类型 所以将该类设计成为模板类 template 它的实现如下 std vector m v 返回Vector的大小 size t size const vector size 湖南师范大学本科毕业论文 25 返回Vector中元素 float operator size t i const float at size t i const vector at i 重设Vector的大小 void resize size t n 清除Vector的元素 void clear vector clear 设置返回一个Vector变量 void SetV const VectorT VectorT const VectorT CPGLVector
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年特岗教师招聘考试英语教育教学能力测试模拟题
- 2025年网络安全工程师高级实战指南与题库
- 电业作业规程培训课件
- 2025年特岗教师招聘面试初中体育科目备考指南及模拟题集
- 幼儿园秋季开学返园工作方案
- 甲状腺超声造影课件
- 甲状腺正常生理功能
- 甲方工程基本知识培训课件
- 《自然选择的证明》课件
- 《空城计》教学课件
- 产品表面外观缺陷的限定标准
- (33)-钠钾泵细胞生物学
- 配电室巡检记录表
- 紧急宫颈环扎术的手术指征及术后管理
- GB/T 242-2007金属管扩口试验方法
- 政治理论水平任职资格考试题库
- 路基压实度汇总表
- 【食品生产加工技术】香肠的加工技术
- 贫困户访谈记录
- 道路喷雾降尘方案
- 唐恬人世间的孤勇者与追光者
评论
0/150
提交评论