Function IntpoHyp(ByVal X As Double, ByVal X1 As Double, ByVal Y1 As Double, _
ByVal X2 As Double, ByVal Y2 As Double, _
ByVal X3 As Double, ByVal Y3 As Double) As Double
Dim dX As Double, dY As Double: dX = X3 - X1: dY = Y3 - Y1: If dY = 0 Then IntpoHyp = Y1: Exit Function
IntpoHyp = Y1 + dY * F0à1xyInt((X - X1) / dX, (X2 - X1) / dX, (Y2 - Y1) / dY)
End Function
Function F0à1xyInt(ByVal X As Double, ByVal XInt As Double, ByVal YInt As Double) As Double
Dim Dét As Double, A As Double, B As Double
Dét = XInt - YInt
If Abs(Dét) > 2.3283064365387E-10 Then
A = XInt * (YInt - 1) / Dét
B = YInt * (XInt - 1) / Dét
If X <> -A Then F0à1xyInt = B - (A * B) / (X + A)
Else
F0à1xyInt = X: End If
End Function
'
Function IntpoExp(ByVal X As Double, ByVal X1 As Double, ByVal Y1 As Double, _
ByVal X2 As Double, ByVal Y2 As Double, _
Optional ByVal Limite As Double = 0) As Double
Y1 = Y1 - Limite: IntpoExp = ((Y2 - Limite) / Y1) ^ ((X - X1) / (X2 - X1)) * Y1 + Limite
End Function
'
Function IntpoMiE(ByVal X As Double, ByVal X1 As Double, ByVal Y1 As Double, _
ByVal X2 As Double, ByVal Y2 As Double, _
ByVal YPrcXMil As Double) As Double
IntpoMiE = Y1 + (Y2 - Y1) * F0à1yMiExp((X - X1) / (X2 - X1), YPrcXMil)
End Function
Function F0à1yMiExp(ByVal X As Double, ByVal YàMiChX As Double) As Double
Dim B As Double
If Abs(YàMiChX - 0.5) > 2.3283064365387E-10 Then
B = (1 / YàMiChX - 2) / YàMiChX
F0à1yMiExp = ((B + 1) ^ X - 1) / B
Else
F0à1yMiExp = X: End If
End Function
'
Function IntpoMiL(ByVal Y As Double, ByVal Y1 As Double, ByVal X1 As Double, _
ByVal Y2 As Double, ByVal X2 As Double, _
ByVal YPrcXMil As Double) As Double
IntpoMiL = X1 + (X2 - X1) * F0à1xMiLog((Y - Y1) / (Y2 - Y1), YPrcXMil)
End Function
Function F0à1xMiLog(ByVal X As Double, ByVal XàMiChY As Double) As Double
Dim B As Double
If Abs(XàMiChY - 0.5) > 2.3283064365387E-10 Then
B = (1 / XàMiChY - 2) / XàMiChY
F0à1xMiLog = Log(B * X + 1) / Log(B + 1)
Else
F0à1xMiLog = X: End If
End Function