文档详情

图形学课程设计(叉树).doc

发布:2017-03-27约6.65千字共15页下载文档
文本预览下载声明
基于四叉树的颜色填充等值线图绘制 计算机图形学课程设计报告 XXX 7/6/2014 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.1 Color 5 4.2 Rect 6 4.3 读取网格数据值 8 4.4 求最大最小值 9 4.5 建立填充颜色表 9 4.6 四叉树颜色填充 10 4.7 绘制等值线 12 5 成果截图 12 6 小结 13 1 问题的提出 1.1 问题重述 等值线是一组值相等的序列连线组成的图形。等值线图在实际中应用广泛,如等高线图、等气压图等等。基于四叉树的颜色填充等值线图绘制方法可利用计算机将按照固定间距采样的网格数据绘制成等值线图。 1.2 实现目标 读入按照固定间距采样的等值线绘制数据,利用四叉树思想进行颜色填充,之后进行等值线扫描、绘制坐标系、色码标识,形成一幅等值线图。 2 程序主构架 2.1 全局变量 vectorColor colorTable;//填充颜色表 vectorvectorint bitmap;//数据文件 vectorvectorint 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类:表示平面上一个点的坐标。 图 1:Tricoder类UML类图 Color类:用于表示颜色。 图 2:Color类UML类图 Rect类:表示一个矩形。c0, c1, c2, c3分别表示矩形左上、右上、左下、右下四个顶点的颜色值;StarX, startY表示矩形左上顶点的x, y坐标;endX, endY表示矩形右下顶点的x, y坐标;colorIndex(double n)计算矩形颜色均值的级数;isConstant()判定矩形内颜色值是否相等;isSole()判定矩形大小是否为1像素。 图 3:Rect类UML类图 2.3 程序流程图 程序流程图如下图所示: 图 4:程序流程图 3 算法原理 3.1 基于四叉树的颜色填充 3.1.1 算法基本思想 将网格中相邻的四个结点视为一个矩形,如果这四个结点的颜色值相等,则用该颜色值填充该矩形。如果不相等,则将此矩形等分为四个小矩形,并用差值的方法计算每个小网格的颜色值,(如图 5所示)递归直至条件满足或者矩形大小小于1像素。 图 5:四叉树颜色填充示例 3.1.2 算法流程图 图 6:四叉树颜色填充算法流程图 3.2 绘制等值线 对于如图 7所示的四联通域,若满足: f=c1+c2+c3+c4-4cc=0 则点cc是等值线的边界线,都则点cc不是等值线的边界线。 图 7:四联通域 4 主要部分实现及说明 4.1 Color #ifndef COLOR_H #define COLOR_H #include iostream using namespace std; 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()//显示颜色(测试用) { coutred|green|blue\t; } bool operator==(const Color t)const { if((red == t.red) (green == t.green) (blue == t.blue)) return true; else return false; } Color operator=(const Color t) { red = t.
显示全部
相似文档