似水无痕 一、二次曲面移动拟合法内插DEM的原理DEM内插就是根据参考点上的高程求出其他待定点上的高程,在数学上属于插值 问题任意一种内插方法都是基于邻近数据点之间存在很大的相关性,从而由邻 近点的数据内插出待定点上的数据移动曲面拟合法内插,是以每一待定点为中 心,定义一个局部函数去拟合周围的数据点该方法十分灵活,一般情况精度较高, 计算相对简单,不需很大计算机内存,其过程如下:(1) 根据实际内插要求,解算待定点 P 的平面坐标( xP , yp ) 2) 为了选取邻近的数据点,以待定点P为圆心,以R为半径作圆(如图1所示),凡落 在圆内的数据点即被选用在二次曲面内插时,考虑到计算方便,将坐标原点移至 该 DEM 格网点 P ( xP , yp )由于二次曲面系数个数为 6,要求选用的数据点个数 n > 6当数据点 i ( xi , yi ) 到待定点 P ( xP , yp )的距离 di = sqr(xi2 - .yi2 ) i 0 ThenFor h = 0 To nFor l = 0 To nNJ(h, l) = (1 / Qz) * BS(h, l) '求解矩阵的逆矩阵NextNextNJZ = NJElseMessageBox.Show("矩阵不可逆")NJZ = NothingEnd IfEnd FunctionPublic Function BSJZ(ByVal q(,) As Double) As Double(,) '求解矩阵的伴随矩阵Dim i As Integer, j As Integer, k As Integer, n As Integer, BS(,) As Doublei = 0j = 0k = 0n = q.GetUpperBound(0)ReDim BS(n, n)For i = 0 To nFor j = 0 To nBS(j, i) = YZS(q, i, j)NextNextBSJZ = BSEnd FunctionPublic Function YZS(ByVal q(,) As Double, ByVal h As Integer, ByVal l As Integer) As Double '求解矩阵的余子式的值Dim i As Integer, j As Integer, x As Integer, y As Integer, n As Integer, YZ(,) As Doublei = 0j = 0n = q.GetUpperBound(0)ReDim YZ(n - 1, n - 1)For i = 0 To nIf i <> h ThenFor j = 0 To nIf j <> l Then '求得 h,l 位置的余子式YZ(x, y) = q(i, j)y += 1End IfNextx += 1End IfNextYZS = (-1)人(h + l + 2) * HLei(YZ)'余子式的值End Function'~~~~~~~~~~~~~~~~~'' 求解 n 阶行列式的值Public Function HLei(ByVal q(,) As Double) As Double '求解 n 阶行列式的值Dim i As Integer, j As Integer, k As Integer, n As Integeri = 0j = 0k = 0If q.GetUpperBound(0) > 1 Then '判断是否为 2*2 矩阵,若不是则继续求其余 子式n = q.GetUpperBound(0)Dim p(n - 1, n - 1) As Double '余子式方阵For k = 0 To nDim h As IntegerDim l As Integer '余子式的行列号h = 0For i = 1 To nl = 0For j = 0 To nIf j <> k Then '按第一列展开求余子式p(h, l) = q(i, j)l += 1End IfNext h += 1NextHLei = HLei + (-1)人(k + 2) * q(0, k) * HLei(p)'递归方法求行列式的值NextElseHLei = q(0, 0) * q(1, 1) - q(0, 1) * q(1, 0)' 二阶行列式求值End IfEnd Function'~~~。