图形学课程设计(四叉树)_第1页
图形学课程设计(四叉树)_第2页
图形学课程设计(四叉树)_第3页
图形学课程设计(四叉树)_第4页
图形学课程设计(四叉树)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于四叉树的颜色 填充等值线图绘制 计算机图形学课程设计报告 XXX 7/6/2014 基于四叉树的颜色填充等值线图绘制 -1- Table of Contents 1问题的提出.1 1.1问题重述.1 1.2实现目标.1 2程序主构架.1 2.1全局变量.1 2.2类.1 2.3程序流程图 .2 3算法原理.4 3.1基于四叉树的颜色填充 .4 3.1.1算法基本思想 .4 3.1.2算法流程图 .4 3.2绘制等值线 .5 4主要部分实现及说明 .5 4.1Color.5 4.2Rect6 4.3读取网格数据值 .8 4.4求最大最小值 .9 4.5建立填充颜色表 .9 4.6四叉树颜色填充 .10 4.7绘制等值线 .12 5成果截图.12 6小结.13 基于四叉树的颜色填充等值线图绘制 -1- 1问题的提出问题的提出 1.1问题重述问题重述 等值线是一组值相等的序列连线组成的图形。等值线图在实际中应用广泛,如等高线 图、等气压图等等。基于四叉树的颜色填充等值线图绘制方法可利用计算机将按照固定间 距采样的网格数据绘制成等值线图。 1.2实现目标实现目标 读入按照固定间距采样的等值线绘制数据,利用四叉树思想进行颜色填充,之后进行 等值线扫描、绘制坐标系、色码标识,形成一幅等值线图。 2程序主构架程序主构架 2.1全局变量全局变量 vector colorTable;/填充颜色表 vector bitmap;/数据文件 vector data;/网格数据 int Zmax;/网格最大值 int Zmin;/网格最小值 int Gmin;/图标最小值 int N;/等值线差值 int dc;/等值线间距 int scale = 20;/采样点间距 int isoline = -1;/边界线填充数值 int def = -2;/bitmap 默认数值 static int count = 0;/测试用统计 int row;/原始数据行数 int col;/原始数据列数 2.2类类 Tricoder 类:表示平面上一个点的坐标。 Tricoder +x: int +y: int +Tricoder(row: int, col: int) 图图 1:Tricoder 类类 UML 类图类图 Color 类:用于表示颜色。 Color +red: int +green: int +blue: int +Color(r: int, g: int, b: int) +Color() +set(r: int, g: int, b: int) +show() +operator=() +operater=() 图图 2:Color 类类 UML 类图类图 Rect 类:表示一个矩形。c0, c1, c2, c3 分别表示矩形左上、右上、左下、右下四个顶 点的颜色值;StarX, startY 表示矩形左上顶点的 x, y 坐标;endX, endY 表示矩形右下顶点的 x, y 坐标;colorIndex(double n)计算矩形颜色均值的级数;isConstant()判定矩形内颜色值是 否相等;isSole()判定矩形大小是否为 1 像素。 Rect +c0: int +c1: int +c2: int +c3: int +StartX: int +startY: int +endX: int +endY: int +Rect() +Rect(cc0: int, cc1: int, cc2: int, cc3: int, sx: int, sy: int, ex: int, ey: int) +colorIndex(n: double) +isConstant() +isSole() 图图 3:Rect 类类 UML 类图类图 2.3程序流程图程序流程图 程序流程图如下图所示: 基于四叉树的颜色填充等值线图绘制 -3- 、 、 、 、 、 、 、 getDate(string filename) 、 、 、 、 、 、 、 、 Zmax、 、 、 、 Zmin void getScope() 、 、 、 、 、 、 、 N 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 ColorTable void getColorTable(Color max, Color min, int n) 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 void isoLine(Color isoColor) 、 openGL、 、 、 、 、 、 、 、 、 、 图图 4:程序流程图:程序流程图 3算法原理算法原理 3.1基于四叉树的颜色填充基于四叉树的颜色填充 3.1.1算法基本思想算法基本思想 将网格中相邻的四个结点视为一个矩形,如果这四个结点的颜色值相等,则用该颜色 值填充该矩形。如果不相等,则将此矩形等分为四个小矩形,并用差值的方法计算每个小 网格的颜色值,(如图 5 所示)递归直至条件满足或者矩形大小小于 1 像素。 4570 3550 4570 3550 57.5 5060 42.5 40 图图 5:四叉树颜色填充示例:四叉树颜色填充示例 3.1.2算法流程图算法流程图 ij.isConstant() ij.isSole() YES NO void fillColor(Rect class Color public: int red;/红色分量 int green;/绿色分量 int blue;/蓝色分量 Color(int r, int g, int b)/构造函数 red = r; green = g; blue = b; Color() void set(int r, int g, int b) red = r; green = g; blue = b; void show()/显示颜色(测试用) cout temp; pos1 = 0; for(i = 0; i Zmax) Zmax = dataij; 4.5建立填充颜色表建立填充颜色表 参数:Color max 最大值颜色;Color min 最小值颜色;int n 颜色表的级数。 颜色表的颜色应当是从最大值到最小值逐渐渐变的,渐变既是对于没级颜色的 RGB 值 差值相等。在本函数中,先求出了每种颜色分量在每级颜色变化的渐变差值,然后循环计 算出每级颜色。 void getColorTable(Color max, Color min, int n) double deltaR = (double)(max.red - min.red)/n;/红色渐 变差值 double deltaG = (double)(max.green - min.green)/n;/绿 色渐变差值 double deltaB = (double)(max.blue - min.blue)/n;/蓝色 渐变差值 double r = min.red, g = min.green, b = min.blue; colorTable.push_back(min); for(int i = 1; i isl;/边界点 /查询边界点 for(int m = 1; m bitmap.size()-1; m+) for(int n = 1; n bitmapm.size()-1; n+) cl = bitmapmn*4 - bitmapm-1n - bitmapm+1n - bitmapmn-1 - bitmapmn+1; if(cl != 0) Tricoder temp(m, n); isl.push_back(temp); /填充边界点 for(int i = 0; i isl.size(); i+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论