zoukankan      html  css  js  c++  java
  • 插值 Interpolation

    1. Linear Interpolation

    |----|----------------|
    x0   x               x1
    
         ( x - x0 )
    t = ------------ 
         ( x1 - x0 )
    t 就是到小端的距离占总距离的比例
    
    x = x0 + t * ( x1 - x0 )
    
    x = ( 1 - t ) * x0 + t * x1
    t 越大,说明到小端的距离占总距离的比例越大,i.e. 越靠近大端
    
    e.g.
    x0 = 0, x1 = 10, x = 2
    t = ( 2 - 0 ) / ( 10 - 0 ) = 0.2
    x = ( 1 - 0.2 ) * 0 + 0.2 * 10 = 0.8 * 0 + 0.2 * 10 = 2
    
    也就是说,比例越大,大端的成分越多,所以大端系数越大
    
    【非常不严谨地说】 t 虽然是用“小端算出来”的,但是它跟“大端是一伙”的
    
    

    2. Bilinear Interpolation

    +-----+---+----+-----+ y1
    |     |   |    |     |
    +-----+---+----+-----+ y
    |     |   |    |     |
    +-----+---+----+-----+ y0
    |     |   |    |     |
    +-----+---+----+-----+
          x0  x    x1
          
    x = ( 1 - u ) * x0 + u * x1
    y = ( 1 - v ) * y0 + v * y1
    
    给定的是四个点 (x0, y0), (x0, y1), (x1, y0), (x1, y1)。
    所谓 Bilinear 指的是在两个方向上做 Linear,但是线性插值的次数有 3 次。
    注意线性插值只能在两者之间插值,所以第一次用 4 个点插值出来 2 个点,第二次用这 2 个点插值出来 1 个点。
    
    【1】 x 方向插值
    
    (x, y0) = ( 1 - u ) * (x0, y0) + u * (x1, y0)
    (x, y1) = ( 1 - u ) * (x0, y1) + u * (x1, y1)
    
    【2】 y 方向插值
    
    (x, y) = ( 1 - v ) * (x, y0) + v * (x, y1)
    
    

    Bilinear (point version)

    3. 给点指定上函数值

    Linear Interpolation

    f(x) = ( 1 - t ) * f(x0) + t * f(x1)
    
    如果不给出系数 t ,给出 x 的话,由于
    
         ( x - x0 )
    t = ------------ 
         ( x1 - x0 )
    
    就变成
    
           ( x1 - x )            ( x - x0 )
    f(x) = ----------- * f(x0) + ----------- * f(x1)
           ( x1 - x0 )           ( x1 - x0 )
    
    

    Linear (function version)

    Bilinear Interpolation

    【1】 x 方向插值
    
    f(x, y0) = ( 1 - u ) * f(x0, y0) + u * f(x1, y0)
    f(x, y1) = ( 1 - u ) * f(x0, y1) + u * f(x1, y1)
    
    【2】 y 方向插值
    
    f(x, y) = ( 1 - v ) * f(x, y0) + v * f(x, y1)
    
    如果不给出系数 u 和 v ,给出 x 和 y 的话,由于
    
         ( x - x0 )
    u = ------------ 
         ( x1 - x0 ) 
    
         ( y - y0 )
    v = ------------ 
         ( y1 - y0 ) 
    
    就变成
    
    【1】 x 方向插值
    
               ( x1 - x )                ( x - x0 )
    f(x, y0) = ----------- * f(x0, y0) + ----------- * f(x1, y0)
               ( x1 - x0 )               ( x1 - x0 )                             
    
               ( x1 - x )                ( x - x0 )
    f(x, y1) = ----------- * f(x0, y1) + ----------- * f(x1, y1)
               ( x1 - x0 )               ( x1 - x0 )                             
    
    【2】 y 方向插值
    
              ( y1 - y )               ( y - y0 )
    f(x, y) = ----------- * f(x, y0) + ----------- * f(x, y1)
              ( y1 - y0 )              ( y1 - y0 )                             
    
    

    Bilinear (function version)

    4. Trilinear Interpolation

    同理不再赘述:有三个参数 u, v, w ,需要给出 8 个点( 8 => 4 => 2 => 1 )。

    Trilinear (point version)

  • 相关阅读:
    Javascript MVC学习杂记3
    Backbone.js 0.9.2 源码分析收藏
    Javascript MVC学习杂记2
    Javascript MVC学习杂记1
    C语言string.h中常用字符函数介绍
    10点网页设计要注意的细节
    js日期函数
    结合回调函数介绍下泛型函数
    【转载】互斥量和信号量的区别
    设计模式之Singleton
  • 原文地址:https://www.cnblogs.com/tandandan/p/14659751.html
Copyright © 2011-2022 走看看