public static double RadiusVector(double JD, bool bHighPrecision)
        {
            if (bHighPrecision)
            {
                return(AASVSOP87D_Venus.R(JD));
            }

            double rho        = (JD - 2451545) / 365250;
            double rhosquared = rho * rho;
            double rhocubed   = rhosquared * rho;
            double rho4       = rhocubed * rho;

            //Calculate R0
            int    nR0Coefficients = g_R0VenusCoefficients.Length;
            double R0 = 0;
            int    i;

            for (i = 0; i < nR0Coefficients; i++)
            {
                R0 += g_R0VenusCoefficients[i].A * Math.Cos(g_R0VenusCoefficients[i].B + g_R0VenusCoefficients[i].C * rho);
            }

            //Calculate R1
            int    nR1Coefficients = g_R1VenusCoefficients.Length;
            double R1 = 0;

            for (i = 0; i < nR1Coefficients; i++)
            {
                R1 += g_R1VenusCoefficients[i].A * Math.Cos(g_R1VenusCoefficients[i].B + g_R1VenusCoefficients[i].C * rho);
            }

            //Calculate R2
            int    nR2Coefficients = g_R2VenusCoefficients.Length;
            double R2 = 0;

            for (i = 0; i < nR2Coefficients; i++)
            {
                R2 += g_R2VenusCoefficients[i].A * Math.Cos(g_R2VenusCoefficients[i].B + g_R2VenusCoefficients[i].C * rho);
            }

            //Calculate R3
            int    nR3Coefficients = g_R3VenusCoefficients.Length;
            double R3 = 0;

            for (i = 0; i < nR3Coefficients; i++)
            {
                R3 += g_R3VenusCoefficients[i].A * Math.Cos(g_R3VenusCoefficients[i].B + g_R3VenusCoefficients[i].C * rho);
            }

            //Calculate R4
            int    nR4Coefficients = g_R4VenusCoefficients.Length;
            double R4 = 0;

            for (i = 0; i < nR4Coefficients; i++)
            {
                R4 += g_R4VenusCoefficients[i].A * Math.Cos(g_R4VenusCoefficients[i].B + g_R4VenusCoefficients[i].C * rho);
            }

            return((R0 + R1 * rho + R2 * rhosquared + R3 * rhocubed + R4 * rho4) / 100000000);
        }
        public static double EclipticLatitude(double JD, bool bHighPrecision)
        {
            if (bHighPrecision)
            {
                return(AASCoordinateTransformation.MapToMinus90To90Range(AASCoordinateTransformation.RadiansToDegrees(AASVSOP87D_Venus.B(JD))));
            }

            double rho        = (JD - 2451545) / 365250;
            double rhosquared = rho * rho;
            double rhocubed   = rhosquared * rho;
            double rho4       = rhocubed * rho;

            //Calculate B0
            int    nB0Coefficients = g_B0VenusCoefficients.Length;
            double B0 = 0;
            int    i;

            for (i = 0; i < nB0Coefficients; i++)
            {
                B0 += g_B0VenusCoefficients[i].A * Math.Cos(g_B0VenusCoefficients[i].B + g_B0VenusCoefficients[i].C * rho);
            }

            //Calculate B1
            int    nB1Coefficients = g_B1VenusCoefficients.Length;
            double B1 = 0;

            for (i = 0; i < nB1Coefficients; i++)
            {
                B1 += g_B1VenusCoefficients[i].A * Math.Cos(g_B1VenusCoefficients[i].B + g_B1VenusCoefficients[i].C * rho);
            }

            //Calculate B2
            int    nB2Coefficients = g_B2VenusCoefficients.Length;
            double B2 = 0;

            for (i = 0; i < nB2Coefficients; i++)
            {
                B2 += g_B2VenusCoefficients[i].A * Math.Cos(g_B2VenusCoefficients[i].B + g_B2VenusCoefficients[i].C * rho);
            }

            //Calculate B3
            int    nB3Coefficients = g_B3VenusCoefficients.Length;
            double B3 = 0;

            for (i = 0; i < nB3Coefficients; i++)
            {
                B3 += g_B3VenusCoefficients[i].A * Math.Cos(g_B3VenusCoefficients[i].B + g_B3VenusCoefficients[i].C * rho);
            }

            //Calculate B4
            int    nB4Coefficients = g_B4VenusCoefficients.Length;
            double B4 = 0;

            for (i = 0; i < nB4Coefficients; i++)
            {
                B4 += g_B4VenusCoefficients[i].A * Math.Cos(g_B4VenusCoefficients[i].B + g_B4VenusCoefficients[i].C * rho);
            }

            double value = (B0 + B1 * rho + B2 * rhosquared + B3 * rhocubed + B4 * rho4) / 100000000;

            //convert results back to degrees
            value = AASCoordinateTransformation.RadiansToDegrees(value);
            return(value);
        }
        public void BTest(double jd, double expectedResult)
        {
            double result = AASVSOP87D_Venus.B(jd);

            Assert.Equal(expectedResult, result);
        }
        public static double EclipticLongitude(double JD, bool bHighPrecision)
        {
            if (bHighPrecision)
            {
                return(AASCoordinateTransformation.MapTo0To360Range(AASCoordinateTransformation.RadiansToDegrees(AASVSOP87D_Venus.L(JD))));
            }

            double rho        = (JD - 2451545) / 365250;
            double rhosquared = rho * rho;
            double rhocubed   = rhosquared * rho;
            double rho4       = rhocubed * rho;
            double rho5       = rho4 * rho;

            //Calculate L0
            int    nL0Coefficients = g_L0VenusCoefficients.Length;
            double L0 = 0;
            int    i;

            for (i = 0; i < nL0Coefficients; i++)
            {
                L0 += g_L0VenusCoefficients[i].A * Math.Cos(g_L0VenusCoefficients[i].B + g_L0VenusCoefficients[i].C * rho);
            }

            //Calculate L1
            int    nL1Coefficients = g_L1VenusCoefficients.Length;
            double L1 = 0;

            for (i = 0; i < nL1Coefficients; i++)
            {
                L1 += g_L1VenusCoefficients[i].A * Math.Cos(g_L1VenusCoefficients[i].B + g_L1VenusCoefficients[i].C * rho);
            }

            //Calculate L2
            int    nL2Coefficients = g_L2VenusCoefficients.Length;
            double L2 = 0;

            for (i = 0; i < nL2Coefficients; i++)
            {
                L2 += g_L2VenusCoefficients[i].A * Math.Cos(g_L2VenusCoefficients[i].B + g_L2VenusCoefficients[i].C * rho);
            }

            //Calculate L3
            int    nL3Coefficients = g_L3VenusCoefficients.Length;
            double L3 = 0;

            for (i = 0; i < nL3Coefficients; i++)
            {
                L3 += g_L3VenusCoefficients[i].A * Math.Cos(g_L3VenusCoefficients[i].B + g_L3VenusCoefficients[i].C * rho);
            }

            //Calculate L4
            int    nL4Coefficients = g_L4VenusCoefficients.Length;
            double L4 = 0;

            for (i = 0; i < nL4Coefficients; i++)
            {
                L4 += g_L4VenusCoefficients[i].A * Math.Cos(g_L4VenusCoefficients[i].B + g_L4VenusCoefficients[i].C * rho);
            }

            //Calculate L5
            int    nL5Coefficients = g_L5VenusCoefficients.Length;
            double L5 = 0;

            for (i = 0; i < nL5Coefficients; i++)
            {
                L5 += g_L5VenusCoefficients[i].A * Math.Cos(g_L5VenusCoefficients[i].B + g_L5VenusCoefficients[i].C * rho);
            }

            double value = (L0 + L1 * rho + L2 * rhosquared + L3 * rhocubed + L4 * rho4 + L5 * rho5) / 100000000;

            //convert results back to degrees
            value = AASCoordinateTransformation.MapTo0To360Range(AASCoordinateTransformation.RadiansToDegrees(value));
            return(value);
        }
        public void RDashTest(double jd, double expectedResult)
        {
            double result = AASVSOP87D_Venus.R_DASH(jd);

            Assert.Equal(expectedResult, result);
        }