Chuyển đến nội dung
Diễn đàn CADViet

prophetqn

Thành viên
  • Số lượng nội dung

    1
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi prophetqn


  1. Hàm nội suy mình viết, 1 chiều, 2 chiều đều xài được, nếu giá trị nhập nhỏ hơn giá trị nhỏ nhất tự động lấy giá trị nhỏ nhất, lớn hơn giá trị lớn nhất thì tự lấy giá trị lớn nhất.

    'Interpolation function v1.0 by TrungHieu
    'Function description: =ns(row_value,column_value,array)
    
    Function ns(x As Variant, y As Variant, z As Variant)
    Dim i As Integer, j As Integer, bang(1 To 4, 1 To 4) As Variant, x2 As Integer, x4 As Integer, y2 As Integer, y4 As Integer
    
    bang(1, 3) = x
    bang(3, 1) = y
    
    Select Case x
    Case Is <= z(1, 2)
        bang(1, 2) = z(1, 2)
        bang(1, 4) = z(1, 2)
        x2 = 2
        x4 = 2
    Case Is >= z(1, z.Columns.Count)
        bang(1, 2) = z(1, z.Columns.Count)
        bang(1, 4) = z(1, z.Columns.Count)
        x2 = z.Columns.Count
        x4 = z.Columns.Count
    Case Else
        i = 2
        Do While x > z(1, i)
            i = i + 1
        Loop
        bang(1, 2) = z(1, i - 1)
        bang(1, 4) = z(1, i)
        x2 = i - 1
        x4 = i
    End Select
    
    Select Case y
    Case Is <= z(2, 1)
        bang(2, 1) = z(2, 1)
        bang(4, 1) = z(2, 1)
        y2 = 2
        y4 = 2
    Case Is >= z(z.Rows.Count, 1)
        bang(2, 1) = z(z.Rows.Count, 1)
        bang(4, 1) = z(z.Rows.Count, 1)
        y2 = z.Rows.Count
        y4 = z.Rows.Count
    Case Else
        j = 2
        Do While y > z(j, 1)
            j = j + 1
        Loop
        bang(2, 1) = z(j - 1, 1)
        bang(4, 1) = z(j, 1)
        y2 = j - 1
        y4 = j
    End Select
    
    bang(2, 2) = z(y2, x2)
    bang(2, 4) = z(y2, x4)
    bang(4, 2) = z(y4, x2)
    bang(4, 4) = z(y4, x4)
    
    If bang(2, 2) = bang(2, 4) Then
        bang(2, 3) = bang(2, 2)
    Else
        bang(2, 3) = (bang(2, 4) - bang(2, 2)) / (bang(1, 4) - bang(1, 2)) * (bang(1, 3) - bang(1, 2)) + bang(2, 2)
    End If
    
    If bang(4, 2) = bang(4, 4) Then
        bang(4, 3) = bang(4, 2)
    Else
        bang(4, 3) = (bang(4, 4) - bang(4, 2)) / (bang(1, 4) - bang(1, 2)) * (bang(1, 3) - bang(1, 2)) + bang(4, 2)
    End If
    
    If bang(2, 3) = bang(4, 3) Then
        bang(3, 3) = bang(2, 3)
    Else
        bang(3, 3) = (bang(4, 3) - bang(2, 3)) / (bang(4, 1) - bang(2, 1)) * (bang(3, 1) - bang(2, 1)) + bang(2, 3)
    End If
    
    ns = bang(3, 3)
    End Function
    
×