// Values

        double[] getK(List <double[]> list)
        {
            double[] K = { };
            if (list.Count == 2)
            {
                // Polynomial Curve:    dY = dX * ( K0 * (X0 + X1) + K1 )
                K     = new double[] { 0, (list[1][1] - list[0][1]) / (list[1][0] - list[0][0]) };
                curve = Ktype.Polynomial;
                return(K);
            }
            double[] dY        = { list[list.Count - 2][1] - list[list.Count - 3][1], list[list.Count - 1][1] - list[list.Count - 2][1] };
            double[] dX        = { list[list.Count - 2][0] - list[list.Count - 3][0], list[list.Count - 1][0] - list[list.Count - 2][0] };
            double   curvature = (dY[1] / dX[1] - dY[0] / dX[0]) / ((dX[0] + dX[1]) / 2);

            if (curvature > 0)
            {
                // Exponential Curve:   Y1/Y0 = EXP(dX * K);
                K     = new double[] { Math.Log(list.Last()[1] / list[list.Count - 2][1]) / dX[1] };
                curve = Ktype.Exponential;
            }
            else if (curvature < 0 && dY[1] >= 0)
            {
                // Logarithmic Curve:   dY = K * LN(X1/X0);
                K     = new double[] { dY[1] / Math.Log(list.Last()[0] / list[list.Count - 2][0]) };
                curve = Ktype.Logarithmic;
            }
            else
            {
                // Polynomial Curve:    dY = dX * ( K0 * (X0 + X1) + K1 )
                K     = new double[] { curvature / 2, dY[1] / dX[1] - (list.Last()[0] + list[list.Count - 2][0]) * curvature / 2 };
                curve = Ktype.Polynomial;
            }

            return(K);
        }
Ejemplo n.º 2
0
        // Values
        double[] getK(List<double[]> list)
        {
            double[] K = { };
            if (list.Count == 2)
            {
                // Polynomial Curve:    dY = dX * ( K0 * (X0 + X1) + K1 )
                K = new double[] { 0, (list[1][1] - list[0][1]) / (list[1][0] - list[0][0]) };
                curve = Ktype.Polynomial;
                return K;
            }
            double[] dY = { list[list.Count - 2][1] - list[list.Count - 3][1], list[list.Count - 1][1] - list[list.Count - 2][1] };
            double[] dX = { list[list.Count - 2][0] - list[list.Count - 3][0], list[list.Count - 1][0] - list[list.Count - 2][0] };
            double curvature = (dY[1] / dX[1] - dY[0] / dX[0]) / ((dX[0] + dX[1]) / 2);

            if (curvature > 0)
            {
                // Exponential Curve:   Y1/Y0 = EXP(dX * K);
                K = new double[] { Math.Log(list.Last()[1] / list[list.Count - 2][1]) / dX[1] };
                curve = Ktype.Exponential;
            }
            else if (curvature < 0 && dY[1] >= 0)
            {
                // Logarithmic Curve:   dY = K * LN(X1/X0);
                K = new double[] { dY[1] / Math.Log(list.Last()[0] / list[list.Count - 2][0]) };
                curve = Ktype.Logarithmic;
            }
            else
            {
                // Polynomial Curve:    dY = dX * ( K0 * (X0 + X1) + K1 )
                K = new double[] { curvature / 2, dY[1] / dX[1] - (list.Last()[0] + list[list.Count - 2][0]) * curvature / 2 };
                curve = Ktype.Polynomial;
            }

            return K;
        }