c#中的三线性插值

Trilinear Interpolation in C#

本文关键字:线性 插值      更新时间:2023-10-16

我需要在c#中制作三线性插值,我一直在搜索,我在c++中找到了一个例子。

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

我需要在c#或Someboy谁可以翻译代码到c#的例子,因为我已经尝试过,我不知道。

这是一个很接近的音译,所以你可以理解,但它显然不是好的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。由于编译器无法解析操作符,因此此处不可能使用泛型。