Sie sind auf Seite 1von 4

Function OrdenarSort(ByVal TempDIST As Object, ByVal TempDESN As Object) 'ESTA FUNCIN ORDENA LOS DATOS DE MENOR A MAYOR.

Dim MaxVal As Object Dim Val2 As Object Dim MaxIndex As Integer Dim i, j As Integer For i = UBound(TempDIST) To 0 Step -1 MaxVal = TempDIST(i) MaxIndex = i For j = 0 To i If TempDIST(j) > MaxVal Then MaxVal = TempDIST(j) Val2 = TempDESN(j) MaxIndex = j End If Next j If MaxIndex < i Then TempDIST(MaxIndex) = TempDIST(i) TempDESN(MaxIndex) = TempDESN(i) TempDIST(i) = MaxVal TempDESN(i) = Val2 End If Next i End Function Function CalElev(ByVal y As Object, ByVal TempDESN As Object) Dim i, j As Integer Dim VElev() As Double ReDim VElev(UBound(TempDESN)) For i = 0 To UBound(TempDESN) Step 1 VElev(i) = y + TempDESN(i) Next i CalElev = VElev End Function Function CERO(ByVal y As Object, ByVal TempDIST As Object, ByVal TempELEV As Object) Dim A, B, D, C, Resul As Double For i = 0 To (UBound(TempELEV) - 1) A = Format(((TempELEV(i + 1)) - (TempELEV(i))), "0.000") B = Format(((TempDIST(i + 1)) - (TempDIST(i))), "0.000") C = Format(A / B, "0.000") D = Format((TempELEV(i)) - (C * (TempDIST(i))), "0.000") Resul = Format((y - D) / C, "0.000") 'RANGOS DEL CERO If Resul > TempDIST(i) And Resul < TempDIST(i + 1) Then 'CERO = Resul GoTo line2 Else GoTo line1 End If line1: Next i line2: CERO = Resul End Function Function Posicion(ByVal x As Object, ByVal TempArray As Object) Dim i As Integer For i = UBound(TempArray) To 0 Step -1 If CDbl(Format(TempArray(i), "0.000")) = CDbl(Format(x, "0.000")) Then

'Posicion = i GoTo line1 End If Next i line1: Posicion = i End Function Function CalArea(ByVal x As Object, ByVal y As Object) Dim n As Double Dim suma, suma1, suma2 As Double n = UBound(x) suma1 = 0 For i = 0 To (n - 1) Step 1 suma1 = suma1 + ((x(i) * y(i + 1)) - (y(i) * x(i + 1))) Next i suma2 = (x(n) * y(0)) - (y(n) * x(0)) suma = suma1 + suma2 CalArea = Format(suma / 2, "0.000") End Function Function CalPerim(ByVal x As Object, ByVal y As Object) Dim n As Double Dim suma As Double n = UBound(x) suma = 0 For i = 0 To (n - 1) Step 1 suma = suma + Math.Sqrt(((x(i + 1) - x(i)) ^ 2) + ((y(i + 1) - y(i)) ^ 2)) Next i CalPerim = Format(suma, "0.000") End Function Function Calcular(ByVal E_CL As Object, ByVal ENAM As Object, ByVal DIST As Object, ByVal DESN As Object, ByVal Qcal As String) Dim ELEV() As Double Dim DISTvF(), ELEVvF() As Double Dim DIZQ(), EIZQ() As Double Dim DDER(), EDER() As Double Dim psi, psd As Double Dim ci As Double Dim cd As Double Dim ki, kd As Double Dim CIzq, CDer As Double Dim posi, posd As Double 'Posicin de los Ceros. Dim rn1, rn2, rn As Double Dim Ah, Pm As Double Dim resul As Double Module1.OrdenarSort(DIST, DESN) ELEV = Module1.CalElev(E_CL, DESN) ''===Inicia Separador de Izquierdas Y Derechas==='' ci = 0 'contador de negativos cd = 0 'contador de positivos For i = 0 To UBound(DIST) Step 1 If DIST(i) < 0 Then ci = ci + 1 ElseIf DIST(i) > 0 Then cd = cd + 1 End If ci = ci cd = cd

Next i ReDim DIZQ(ci), EIZQ(ci), DDER(cd), EDER(cd) ki = 0 kd = 0 For ii = 0 To UBound(DIST) Step 1 If DIST(ii) < 0 Then DIZQ(ki) = DIST(ii) EIZQ(ki) = ELEV(ii) ki = ki + 1 ElseIf DIST(ii) > 0 Then DDER(kd) = DIST(ii) EDER(kd) = ELEV(ii) kd = kd + 1 End If ki = ki kd = kd Next ii DIZQ(ci) = 0 EIZQ(ci) = E_CL Module1.OrdenarSort(DIZQ, EIZQ) DDER(cd) = 0 EDER(cd) = E_CL Module1.OrdenarSort(DDER, EDER) CIzq = Module1.CERO(ENAM, DIZQ, EIZQ) CDer = Module1.CERO(ENAM, DDER, EDER) ReDim Preserve DIZQ(UBound(DIZQ) + 1), EIZQ(UBound(EIZQ) + 1), DDER(UBound(DDER) + 1), EDER(UBound(EDER) + 1) DIZQ(UBound(DIZQ)) = CIzq EIZQ(UBound(EIZQ)) = ENAM DDER(UBound(DDER)) = CDer EDER(UBound(EDER)) = ENAM Module1.OrdenarSort(DIZQ, EIZQ) Module1.OrdenarSort(DDER, EDER) posi = Module1.Posicion(CIzq, DIZQ) posd = Module1.Posicion(CDer, DDER) rn = (UBound(DIZQ) - posi) + (LBound(DDER) + posd) rn1 = (UBound(DIZQ) - posi) rn2 = (LBound(DDER) - posd) ReDim DISTvF(rn), ELEVvF(rn) psi = posi For j = 0 To rn1 DISTvF(j) = DIZQ(psi) ELEVvF(j) = EIZQ(psi) psi = psi + 1 Next j psd = posd For jj = (rn1 + 1) To UBound(DISTvF) DISTvF(jj) = DDER(psd) ELEVvF(jj) = EDER(psd) psd = psd - 1 Next jj Module1.OrdenarSort(DISTvF, ELEVvF) ' Ah = Module1.CalArea(DISTvF, ELEVvF) Pm = Module1.CalPerim(DISTvF, ELEVvF) If Qcal = "Area" Then resul = Ah

ElseIf Qcal = "Perim" Then resul = Pm End If Calcular = resul End Function End Module

Das könnte Ihnen auch gefallen