コード例 #1
0
        /// <summary>
        /// Retrieve values for all dimensions for all 4 control points.
        /// </summary>
        /// <returns>
        /// A 2 dimensional array with all the dimension values for all 4 control points.
        /// The first dimension of the array indicates the control point, the second the dimension.
        /// </returns>
        double[][] RetrieveValues(int smallerIndex, int biggerIndex, AbstractTypeInterpolationProvider <TValue, TMath> typeProvider)
        {
            // Retrieve required values.
            TValue p0 = KeyPoints[smallerIndex != 0 ? smallerIndex - 1 : smallerIndex];
            TValue p1 = KeyPoints[smallerIndex];
            TValue p2 = KeyPoints[biggerIndex];
            TValue p3 = KeyPoints[biggerIndex != KeyPoints.Count - 1 ? biggerIndex + 1 : biggerIndex];

            // Retrieve required dimension values.
            double[] p0Values = typeProvider.GetDimensionValues(p0).Cast <double>().ToArray();
            double[] p1Values = typeProvider.GetDimensionValues(p1).Cast <double>().ToArray();
            double[] p2Values = typeProvider.GetDimensionValues(p2).Cast <double>().ToArray();
            double[] p3Values = typeProvider.GetDimensionValues(p3).Cast <double>().ToArray();

            return(new[] { p0Values, p1Values, p2Values, p3Values });
        }
コード例 #2
0
        protected override TValue Interpolate(int smallerIndex, int biggerIndex, TMath position, double percentage)
        {
            AbstractTypeInterpolationProvider <TValue, TMath> typeProvider = KeyPoints.TypeProvider;

            // Retrieve required values.
            TValue smaller = KeyPoints[smallerIndex];
            TValue bigger  = KeyPoints[biggerIndex];

            // Retrieve required dimension values.
            TMath[] smallerValues = typeProvider.GetDimensionValues(smaller);
            TMath[] biggerValues  = typeProvider.GetDimensionValues(bigger);

            // Linear interpolation.
            TMath[] interpolated = new TMath[typeProvider.AmountOfDimensions];
            for (int i = 0; i < typeProvider.AmountOfDimensions; ++i)
            {
                var valueRange = new Interval <TMath>(smallerValues[i], biggerValues[i]);
                interpolated[i] = valueRange.GetValueAt(percentage);
            }

            return(typeProvider.CreateInstance(position, interpolated));
        }