#!/usr/bin/env /friends/bin/basicscript Public Function calcLinear(dataX() As Double, dataZ() As Double, znum As Long, cAvx() As Variant, cBvx() As Variant, cCvx() As Variant, cAvz() As Variant, cBvz() As Variant, cCvz() As Variant, xthre() As Double, dataNum() As Integer) As Boolean Dim i, j, s, t As Long Dim u, v As Long Dim Uth, Vth As Long Dim x0, X1, z0, Z1, X, Z As Double Dim U_PIX, V_PIX As Long U_PIX = MAX_U_PIX / BLOCK_U_NUM V_PIX = MAX_V_PIX / BLOCK_V_NUM Uth = U_MUL * MAX_U_PIX Vth = V_MUL * MAX_V_PIX For i = 0 To znum - 1 For j = 0 To DATA_X_NUM - 1 If j >= ((DATA_X_NUM - 1) / 2 - (dataNum(i) - 1) / 2) And j <= ((DATA_X_NUM - 1) / 2 + (dataNum(i) - 1) / 2) Then If data1U(DATA_X_NUM * (znum - 1 - i) + j) < Uth And data1V(DATA_X_NUM * (znum - 1 - i) + j) < Vth Then s = CLng(data1U(DATA_X_NUM * (znum - 1 - i) + j) \ (U_MUL * U_PIX)) t = CLng(data1V(DATA_X_NUM * (znum - 1 - i) + j) \ (V_MUL * V_PIX)) u = data1U(DATA_X_NUM * (znum - 1 - i) + j) - s * (U_MUL * U_PIX) v = data1V(DATA_X_NUM * (znum - 1 - i) + j) - t * (V_MUL * V_PIX) x0 = cBvx(BLOCK_V_NUM * s + t) / (2 ^ BVX_2n) * v + cCvx(BLOCK_V_NUM * s + t) / (2 ^ CVX_2n) z0 = cAvz(BLOCK_V_NUM * s + t) / (2 ^ AVZ_2n) * v * v + cBvz(BLOCK_V_NUM * s + t) / (2 ^ BVZ_2n) * v + cCvz(BLOCK_V_NUM * s + t) / (2 ^ CVZ_2n) X1 = cBvx(BLOCK_V_NUM * (s + 1) + t) / (2 ^ BVX_2n) * v + cCvx(BLOCK_V_NUM * (s + 1) + t) / (2 ^ CVX_2n) Z1 = cAvz(BLOCK_V_NUM * (s + 1) + t) / (2 ^ AVZ_2n) * v * v + cBvz(BLOCK_V_NUM * (s + 1) + t) / (2 ^ BVZ_2n) * v + cCvz(BLOCK_V_NUM * (s + 1) + t) / (2 ^ CVZ_2n) X = (x0 * (U_MUL * U_PIX - u) + X1 * u) / (U_MUL * U_PIX) Z = (z0 * (U_MUL * U_PIX - u) + Z1 * u) / (U_MUL * U_PIX) dataX(DATA_X_NUM * i + j) = X dataZ(DATA_X_NUM * i + j) = Z Else dataX(DATA_X_NUM * i + j) = INVALID_VALUE2 dataZ(DATA_X_NUM * i + j) = INVALID_VALUE2 End If Else dataX(DATA_X_NUM * i + j) = INVALID_VALUE dataZ(DATA_X_NUM * i + j) = INVALID_VALUE End If '↑20120701usami Next Next calcLinear = True End Function