- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于OpenGL技术等高线绘制
基于OpenGL技术等高线绘制
摘 要:该文主要介绍了使用标准C语言在C++平台下,使用OpenGL数据库以克里金算法和网格跟踪算法实现等值线绘制的过程。具体的介绍了算法和实现。
关键词:等高线;克里金;网格跟踪
等高线是我们日常生活要经常用到的一种二维图形。等高线是应用非常广泛的一种图形。无论是在地质应用方面,医学应用方面,等高线都是一种不可或缺的图形表达方式。随着计算机技术,特别是随着图形图像学的发展,二维图形的绘制更为方便,并且图形的显示更为精确。OpenGL是近几年发展起来的一种图形库,它的特点就是方便,功能强大。所以目前OpenGL已经发展为一种非常流行的图形库。本文就介绍的是以OpenGL技术为基础在VC++的平台上使用标准C语言开发的等高线绘图技术。此软件的特点就在于使用的是克里金网格算法与等值线跟踪算法进行数据的处理。然后根据最终的数据使用OpenGL图形库,绘出等高线。
1.程序的设计
本程序分为两个部分,最重要的部分就是数据处理部分。然后是图形生成部分。数据处理部分重要是因为它涉及到了很多的算法。它的数据处理过程大概经如下的步骤:
网格化以后的数据进行等值线的跟踪,也就是图中的倒数第二步和倒数第三步。网格化是使用的克里金网格化的方法,具体的算法下面介绍。
2.算法的介绍
2.1克里金网格化的方法
克里金插技术是网格插值的一种,被广泛地应用。它的最大特点在于它的预测性。相对于其他的计算机绘图方法,它具有能运用随即过程和最优化的一些理论,使所绘制的图形带有很强的预测性。这样的技术用在地质建模上,有着很强的指导意义。
本文用到的克里金技术,主要是普通克里金(Ordinary Kriging)。它的主要思想是:设一个平稳过程Z(x),m为数学期望的常数。Z*(x0)是Z(x0)的无偏估计。设有参数λi 那么无偏估计可以写成如下的形式。
以上就是普通克里金方程组,也是最为常用的插值算法。我们所用到的克里金算法已经封装为一个类。它在程序里主要是调用类KrigingMethod来实现的。它的网格化是使用CgenerateGridwithKriging类来实现的。也就是说,需要网格化时,只需要调用上面的类进行对象化,就可以实现数据的网格化。其中Z值就是估计的在网格中节点的值。这里要确定几个参数,首先是n的值。从公式上看就是确定多少个计算公式,从绘图角度来看就是确定网格的容量;其次就是确定C(X1,X2)中C的关系模型。C可以是球形模型,也可以是线型模型。选好模型后就可以计算X1和X2的关系的值,然后求出n个Z值。这样就完成了网格化的过程。
2.2网格跟踪算法
网格跟踪的功能就是把网格化好的数据使用网格跟踪算法转换为可以做出等值线的三列数据格式的数据文件。首先看一下网格化后的文件的样子:
上面就是网格化后的网格文件。每一个网格节点的值都列了出来。最上面标注的是:起始网格的X与Y方向上的坐标,还有步长,由这些信息构成的网格节点。然后使用网格跟踪算法进行网格上的等值点的跟踪。过程如下图:
网格单元与等值线的交点计算主要计算各单元边与等值线的交点,可采用顶点判定,边上插值的方法计算。设等值线的值为Ft,若Fij(Ft,则记顶点为“”;若FijFt,则记顶点为“+”。若单元的四个顶点全为“+”或“”,则网格单元内无等值线;否则对两个顶点分别为“+”“”的单元边插值计算等值线的交点,并在单元内连线。把连起来的点的数据记录下来,然后分类。这样就形成了可以作图的最终以.dat结尾的文件。它的格式为三列:前两列表示X与Y,最后一列表示高度。
3.程序的实现
克里金算法是写在一个叫KrigingMethod的类里,主要的函数是普通克里金。函数如下:
void CKrigingMethod::do_ork(int ndata, ipt n_nodes, pt delta, search srch, int max_per_quarter,pt *coord, float *value, variogram_model *variogram, float *node)
//使用普通克里金方法估计
{
allocate_cond_data_matrices(max_krig_points,cond_pts,cond_value);
//分配大小为max_krig_points的cond_pts, cond_value两个数组.
allocate_template(ndata,tmp);
//分配大小为ndata的tmp
原创力文档


文档评论(0)