随笔 - 373  文章 - 1  评论 - 771  阅读 - 137万

样条之埃特金(Aitken)逐步插值函数

 核心代码:

复制代码
//////////////////////////////////////////////////////////////////////
// 埃特金逐步插值
//////////////////////////////////////////////////////////////////////
static float GetValueAitken(const void* valuesPtr, int stride, int n, float t, float eps)
{ 
    int i,j,k,m,l;
    float z,xx[10],yy[10];

    // 初值
    z = 0.0f;

    // 特例处理
    if (n < 1) 
    {
        return(z);
    }
    if (n == 1) 
    { 
        z = YfGetFloatValue(valuesPtr, stride, 0);  
        return(z);
    }

    float xStep = 1.0f/(n - 1);

    // 开始插值
    m=10;
    if (m > n) 
    {
        m = n;
    }

    if (t <= 0.0f) 
    {
        k = 1;
    }
    else if (t >= (n-1)*xStep) 
    {
        k = n;
    }
    else
    { 
        k = 1; 
        j = n;

        while ((k-j != 1) && (k-j != -1))
        { 
            l = (k+j)/2;

            if (t < (l-1)*xStep) 
                j = l;
            else 
                k = l;
        }

        if (fabs(t-((l-1)*xStep)) > fabs(t-(j-1)*xStep)) 
        {
            k = j;
        }
    }

    j = 1; 
    l = 0;
    for (i = 1; i <= m; i++)
    { 
        k = k+j*l;
        if ((k<1) || (k>n))
        { 
            l = l+1; 
            j = -j; 
            k = k+j*l;
        }

        xx[i-1] = (k-1)*xStep; 
        yy[i-1] = YfGetFloatValue(valuesPtr, stride, k - 1);
        l = l+1; 
        j = -j;
    }

    i = 0;
    do
    { 
        i = i+1; 
        z = yy[i];

        for (j = 0; j <= i-1; j++)
        {
            z = yy[j]+(t-xx[j])*(yy[j]-z)/(xx[j]-xx[i]);
        }

        yy[i] = z;
    } 
    while ((i != m-1) && (fabs(yy[i]-yy[i-1]) > eps));

    return(z);
}
复制代码

切图:

 

 

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

posted on   叶飞影  阅读(2035)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示