VC++60基于OpenGL等值颜色填充图.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC60基于OpenGL等值颜色填充图

计算机图形学课程设计 --基于四叉树算法绘制颜色填充等值线图 姓名:陈明 学号:200905070110 学院:信息科学与技术学院 指导老师:黄地龙老师 问题提出与需求分析 问题及目标 问题:基于四叉树算法绘制颜色填充等值线图。 目标:利用四叉树思想用所给文件中的数据绘制等值线图,并绘出坐标系及颜色标识码。通过本次实验提高学生编程能力,加深对OpenGL的理解,加深对VC++6.0的认识。 问题概念及算法原理 等值线是一组值相等的序列连线组成的图形。等值线图在实际中应用广泛, 如等高线图、等气压图等等。等值线的表达形式有两类:一类是画线等值线图;另一类是颜色填充等值线图。 依据数据分部不同,等值线图的绘制有两类方法:三角网法和矩形网格法。三角网法是针对数据分布不规则的环境下的一种绘制方法。矩形网格法是一种针对数据分布规则的等直线图绘制方法。它是设平面区域按一定大小的网格距划分的矩形网格。 当网格四个节点的颜色值相等时,则用该颜色值填充该矩形,否则将矩形网格等分四个小网格,并用插值方法计算每个小网格的颜色值,递归使用网格四个节点的颜色值是否相等,由此依次建立一棵四叉树。绘图程序设计的技术思路 程序总体设计 利用四叉树思想绘制等颜色填充等值线图,首先应从数据文件中读取数据, 用二级指针**a来存放,并求出最大值max及最小值min,接收键盘输入的颜色级数Ncolor,并求出等值颜色域的间距Dc,Dc=(max-min)/Ncolor。为了填充颜色得先建立颜色填充表,可以采用颜色类的方式,本程序中采用三个浮点型数组r、g、b来建立颜色填充表,由函数void Color(int m)来构造。 准备工作做好了开始构建四叉树,采用递归思想循环调用四叉树算法填充矩形网格的颜色值,当x增量和y增量都小于1个像素点时则可认为该点为等值区域的边界点,即等值线上的点,作为描绘等值线的点。填充完毕后建立平面坐标系并绘制色码标识。 根据以上所述,程序设计步骤可分为以下几步: (1)读入网格数据值,并求全区网格的最大值max和最小值min。 (2)给定等值线的级数Ncolor,求得等值线的间距Dc=(max-min)/Ncolor。 (3)建立填充颜色表r[],g[],b[]。 (4)循环递归调用四叉树算法填充网格矩形颜色值。 (5)等值线检测 (6)绘制平面坐标系 (7)绘制色码标识 详细设计及各函数主要算法原理 (1)void TreeMath(float x,float y,float dx,float dy,int z1,int z2,int z3,int z4); 递归调用四叉树算法填充网格矩形颜色值由下列式子分别计算z1、z1、z3、z4、的颜色索引值Ic1、Ic2、Ic3、Ic4,Ic1=int((z1-min)/Dc),Ic2=int((z2-min)/Dc),Ic3=int((z3-min)/Dc),Ic4=int((z4-min)/Dc)(Dc为等值颜色域的间距,min为数据最小值)。当它们颜色索引值相等时则说明它们位于一个等值区域(该区域是以点(x,y)和(x+dx,y+dy)为对角顶点的矩形),调用函数glColor3f(r[Ic1],g[Ic1],b[Ic1])对该区域设置对应的颜色。若dx,dy都小于1,则说明(x,y)位于等值域的边界上。否则循环递归调用该函数直到满足上面两个条件之一。 (2)void gltRasterText(float x, float y, const char *text, void *font)采用光栅思想在(x,y)处输出text的值,输出字体为font,用于描绘坐标系,输出X轴和Y轴的坐标。 (3)void DrawCoordinate(float x,float y)绘制坐标系,(x,y)为图片开始的坐标,即图片坐标系的原点,由于对OpenGL不是很熟悉,所以在本程序中采用的是画网格的方法绘制图片的坐标系。在边缘部分都延长出去5个像素点,从原点开始每隔20个单位分别在X轴方向和Y轴方向画一条直线,X轴方向画column(数据文件中数据的列数)条,Y轴方向画row(数据文件中数据的行数)条,再调用gltRasterText(float x, float y, const char *text, void *font)在相应的地方输出坐标轴的坐标值。网格画好了再将图贴上去则把中间的网格覆盖,只留坐标轴。由于是先画网格后画图,所以部分坐标轴会被覆盖,所以外围四条线单独在绘图完成后再画。 (4)void DrawCodeIdentifier(float x,float y);色码标识绘制函数,从点(x,y)开始沿X、Y的正向绘制色码标识,色码标识由Ncolor(颜色级数)个小矩形构成

文档评论(0)

linjuanrong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档