Azmyth.Procedural.SimplexSplineNoise.interpolate C# (CSharp) Method

interpolate() private method

private interpolate ( double x, double y, byte h1, byte h2, byte h3, byte h4, byte h5, byte h6, byte h7, byte h8, byte h9, byte h10, byte h11, byte h12 ) : double
x double
y double
h1 byte
h2 byte
h3 byte
h4 byte
h5 byte
h6 byte
h7 byte
h8 byte
h9 byte
h10 byte
h11 byte
h12 byte
return double
        private double interpolate(double x, double y,
		    byte h1, byte h2, byte h3, byte h4, byte h5, byte h6,
		    byte h7, byte h8, byte h9, byte h10, byte h11, byte h12)
        {
            //An absolutely ridiculous polynomial spline. Works on the skewed grid so it has nice coefficients.
            //Could probably be optimized a bit if the compiler doesn't already do it.
            double value = (h1/2.0 - h4/3.0 - h5 + h8/2.0 - h3/2.0 + h6 + h7/3.0 - h10/2.0)*x*x*x*x*x
            + ((4*h4)/3.0 - (4*h1)/3.0 + h2/6.0 + 2*h5 - (4*h8)/3.0 + (7*h3)/6.0 - 3*h6 + h9/6.0
            - h7/3.0 + (7*h10)/6.0 - y*((5*h1)/6.0 - (5*h4)/6.0 + (5*h2)/6.0 - (5*h5)/2.0 + (5*h8)/3.0
            - (5*h3)/3.0 + (5*h6)/2.0 - (5*h9)/6.0 + (5*h7)/6.0 - (5*h10)/6.0))*x*x*x*x + (((5*h2)/3.0
            - (10*h5)/3.0 + (5*h8)/3.0 - (5*h3)/3.0 + (10*h6)/3.0 - (5*h9)/3.0)*y*y + ((8*h1)/3.0
            - (8*h4)/3.0 + (4*h2)/3.0 - 4*h5 + (8*h8)/3.0 - 4*h3 + 6*h6 - 2*h9 + (2*h7)/3.0 - (2*h10)/3.0)*y
            + h1 - 2*h4 - h2/3.0 + (2*h5)/3.0 + h8 - (2*h3)/3.0 + (4*h6)/3.0 - h9/3.0 - (2*h10)/3.0)*x*x*x
            + (((5*h5)/3.0 - (5*h8)/3.0 - (10*h6)/3.0 + (10*h9)/3.0 + (5*h7)/3.0 - (5*h10)/3.0)*y*y*y
            + (5*h5- 5*h2 + 5*h3 - 5*h6)*y*y + (3*h4 - 3*h1 + h2 - h5 + 2*h3 - 2*h6)*y + (4*h4)/3.0
            - (8*h5)/3.0 + (4*h6)/3.0)*x*x + (((5*h8)/3.0 - (5*h5)/6.0 - (5*h2)/6.0 + (5*h3)/6.0
            + (5*h6)/2.0 - (5*h9)/2.0 - (5*h11)/6.0 - (5*h7)/3.0 + (5*h10)/6.0 + (5*h12)/6.0)*y*y*y*y
            + ((8*h2)/3.0 - 2*h5 - (2*h8)/3.0 - (8*h3)/3.0 + (8*h6)/3.0 - (2*h9)/3.0 + (2*h11)/3.0
            - (2*h7)/3.0 + (4*h10)/3.0 - (2*h12)/3.0)*y*y*y + (2*h2 + h5 - 3*h8 - 2*h3 - h6 + 3*h9)*y*y
            + ((4*h1)/3.0 - (4*h4)/3.0 - (4*h2)/3.0 + (8*h5)/3.0 - (4*h8)/3.0 - (4*h6)/3.0 + (4*h9)/3.0)*y
            - h1/6.0 - h4/3.0 + h2/6.0 - h8/6.0 + h6/3.0 + h9/6.0)*x + (h2/2.0 - h8/2.0 - h3/3.0 - h6 + h9
            + h11/3.0 + h7/2.0 - h12/2.0)*y*y*y*y*y + (h5 - h2/2.0 - h8/2.0 + h3/2.0 - h6/2.0 - h9/2.0
            + h11/2.0 + h7/3.0 - (2*h10)/3.0 + h12/3.0)*y*y*y*y + ((5*h8)/3.0 - (5*h2)/3.0 + (2*h3)/3.0
            + (4*h6)/3.0 - (4*h9)/3.0 - (2*h11)/3.0)*y*y*y + ((4*h2)/3.0 - (8*h5)/3.0 + (4*h8)/3.0)*y*y
            + (h4/6.0 - h1/6.0 - h2/3.0 + h8/3.0 - h6/6.0 + h9/6.0)*y + h5;
            return value;
        }