示例#1
0
//C++ TO C# CONVERTER NOTE: C# does not allow default values for parameters. Overloaded methods are inserted above.
//ORIGINAL LINE: static double Calculate(double M, double e, int nIterations = 53)
    public static double CalculateIter(double M, double e, int nIterations)
    {
        //Convert from degrees to radians
        M = CT.D2R(M);
        double PI = CT.PI();

        double F = 1;

        if (M < 0)
        {
            F = -1;
        }
        M = Math.Abs(M) / (2 * PI);
        M = (M - (int)(M)) * 2 * PI * F;
        if (M < 0)
        {
            M += 2 * PI;
        }
        F = 1;
        if (M > PI)
        {
            F = -1;
        }
        if (M > PI)
        {
            M = 2 * PI - M;
        }

        double E     = PI / 2;
        double scale = PI / 4;

        for (int i = 0; i < nIterations; i++)
        {
            double R = E - e * Math.Sin(E);
            if (M > R)
            {
                E += scale;
            }
            else
            {
                E -= scale;
            }
            scale /= 2;
        }

        //Convert the result back to degrees
        return(CT.R2D(E) * F);
    }
示例#2
0
    public static double LengthOfEllipse(double e, double a)
    {
        double b = a * Math.Sqrt(1 - e * e);

        return(CT.PI() * (3 * (a + b) - Math.Sqrt((a + 3 * b) * (3 * a + b))));
    }