C#中的三线性插值

时间:2014-06-26 11:39:50

标签: c# c++ interpolation

我需要在C#中进行三线性插值,我一直在搜索并在C ++中找到了示例。

示例在这里:http://www.siafoo.net/snippet/33,但它是在C ++中。

我需要c#或Someboy中的例子,他们可以将代码翻译成C#,因为我已经尝试过但我不知道。

1 个答案:

答案 0 :(得分:3)

这是一个密切的音译,所以你可以理解,但显然不是好的C#代码。

public static class Interpolator
{
    public static double Linear(double target, params double[] values)
    {
        return target * values[0] + (1.0 - target) * values[1];
    }

    public static double Bilinear(double[] target, params double[] values)
    {
        var prime = new[]
        {
            Linear(target[1], values),
            Linear(target[1], values.Skip(2).Take(2).ToArray())
        };

        return Linear(target[0], prime);
    }

    public static double Trilinear(double[] target, params double[] values)
    {
        var prime = new[]
        {
            Bilinear(target, values),
            Bilinear(target.Skip(1).ToArray(), values.Skip(4).ToArray())
        };

        return Linear(target[2], prime);
    }
}

注意:由于C#具有泛型而不是模板,因此无法将此代码概括为T类型.C ++编译器可以在运行时检查类型T实现了所需的运算符,但是没有C#类型约束可以让您只将数字类型替换为T.由于编译器无法解析运算符,因此无法使用泛型。