grid_interpo.lua


NAME
    grid_interpo

FUNCTION
    grid_interpo(x, y, x1, x2, y1, y2, zx1y1, zx2y1, zx2y2, zx1y2)

NOTES
    Linear interpolation for a grid

INPUTS
    x, y           - coordinate 
    x1, y1, x2, y2 - grid coordinates
    z??  - values at grid coordinates

OUTPUTS
    z at (x y)

SOURCE

function grid_interpo(x, y, x1, x2, y1, y2, zx1y1, zx2y1, zx2y2, zx1y2)
    assert(x2 >= x1)
    assert(y2 >= y1)
    assert(x1 < x)
    assert(y1 < y)
    assert(x < x2)
    assert(y < y2)
    local dx1 = 1 - (x - x1) / (x2 - x1)
    local dx2 = 1 - (x2 - x) / (x2 - x1)
    local dy1 = 1 - (y - y1) / (y2 - y1)
    local dy2 = 1 - (y2 - y) / (y2 - y1)
    local f1 = dx2 * dy2
    local f2 = dx1 * dy2
    local f3 = dx1 * dy1
    local f4 = dx2 * dy1
    
    return f1 * zx1y1 + f2 * zx2y1 + f3 * zx2y2 + f4 * zx1y2
end