zoukankan      html  css  js  c++  java
  • 样条之埃尔米特(Hermite)插值函数

    核心代码:

    //////////////////////////////////////////////////////////////////////
    // 埃尔米特等距插值
    //////////////////////////////////////////////////////////////////////
    static float GetValueHermite(const void* valuesPtr, int stride, int n, float t, float dc)
    { 
        int i,j;
        float z,s,p,q, v, d;
    
        // 初值
        z = 0.0;
    
        // 特例处理
        if (n < 1) 
        {
            return(z);
        }
        if (n == 1) 
        { 
            z = YfGetFloatValue(valuesPtr, stride, 0);  
            return(z);
        }
    
        float xStep = 1.0f/(n - 1);
    
        // 循环插值
        for (i = 1; i <= n; i++)
        { 
            s = 1.0f; 
            q = (i-1)*xStep;
    
            for (j = 1; j <= n; j++)
            { 
                p = (j-1)*xStep;
                if (j != i) 
                {
                    s = s*(t-p)/(q-p);
                }
            }
    
            s = s*s;
            p = 0.0f;
    
            for (j = 1; j <= n; j++)
            {
                if (j != i) 
                {
                    p = p+1.0f/(q-((j-1)*xStep));
                }
            }
    
            v = YfGetFloatValue(valuesPtr, stride, i - 1);  
            if (i < n)
            {
                d = YfGetFloatValue(valuesPtr, stride, i) - v;
            }
            else
            {
                d = v - YfGetFloatValue(valuesPtr, stride, i - 2); 
            }
    
            q = v + (t-q)*(d*dc-2.0f*v*p);
            z = z + q*s;
        }
    
        return(z);
    }

    切图:

     

     

    相关软件的下载地址为:http://files.cnblogs.com/WhyEngine/TestSpline.zip

  • 相关阅读:
    adjacent_diffenerce
    数值算法速食食谱
    accumulate
    平面分割
    进制转换
    奖学金
    谁考了第k名
    奇数单增序列
    病人排序
    灯的开关状态
  • 原文地址:https://www.cnblogs.com/WhyEngine/p/4020419.html
Copyright © 2011-2022 走看看