科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件GIS三维地景仿真设计之地景的数学处理

GIS三维地景仿真设计之地景的数学处理

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文主要对重绘函数的实现、地景模型的几何变换、高差缩放和网格缩放等内容进行介绍。

作者:青岛郎锐 来源:天极开发 2007年10月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
高差缩放与网格缩放处理

  并非所有的场景都是起伏较大的,对于那些起伏不是很明显的地形,建模出来后可能就是一块平板,为了能够清楚的看出其地形走势,需要通过高差缩放来放大其各网格节点间的高程差距。这部分功能实现起来非常简单,只需将m_pDemH指向的高程数据缓冲区中的数据取值做相应的缩放处理并在重新计算法向量和初始化列表后重绘场景即可:

if (dlg.m_fValue > 0) {
 m_fHRate *= dlg.m_fValue;
 for (int i = 0; i < m_nHSize; i++)
  m_pDemH[i] = (int)(dlg.m_fValue * m_pDemH[i]);
}else{
 for (int i = 0; i < m_nHSize; i++)
  m_pDemH[i] = (int)(m_pDemH[i] / m_fHRate);
 m_fHRate = 1.0f;
}

  下图为高差缩放系数为1.5时的效果图:


  前面实现的缩放处理能够起到场景的放大缩小效果,但这是通过改变场景的缩放系数来实现的,即"视觉"上的缩放,由众多网格所组成的地景模型大小并没有任何变化。下面将通过改变网络间隔的方法来达到地景放大、缩小的效果。其实现原理是通过改变DEM网络间隔参数m_nInterval的取值来实现的,在更改之后需要相应的调整m_pDemX和m_pDemY中网格平面坐标的取值,并同样需要在重新计算法向量和初始化列表后重绘场景:

// 加大网络间隔(缩小时除以2)
m_nInterval *= 2;
DemHeader.interval = (float)m_nInterval;
for (int i = 0; i < m_nDemY; i++) {
 for (int j = 0; j < m_nDemX; j++) {
  m_pDemX[m_nDemX * i + j] = m_nInterval * j - (m_nDemX / 2) * m_nInterval;
  m_pDemY[m_nDemX * i + j] = m_nInterval * i - (m_nDemY / 2) * m_nInterval;
 }
}

点击放大此图片

  上图为网格间隔倍增1倍时的场景。

  小结

  本文主要介绍了对已经绘制的DEM数字高程模型场景进行平移、旋转、缩放等几何变换处理方法以及对DEM数据的高差缩放和网格缩放等处理方法。读者应当能够掌握上述操作的基本实现过程。本文所述程序在Windows 2000 Professional + SP4下由Microsoft Visual C++ 6.0编译通过。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章