コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="bodyId">0 - sun, 1-moon, 2-mars, 3-mercury, 4-jupiter, 5-venus, 6-saturn, 7-rahu, 8-ketu, 9-ascendant</param>
        /// <param name="julianDate"></param>
        /// <param name="L">Longitude in degrees</param>
        /// <param name="B">Latitude in degrees</param>
        /// <param name="R">Radius in AU</param>
        public static void GetGeocentricCoordinates(int bodyId, double julianDate, out double L, out double B, out double R)
        {
            // for sun and moon calculate always fresh values
            if (bodyId == 0)
            {
                GCEarth.Calculate(julianDate, out L, out B, out R);
                L = GCMath.putIn360(L + 180);
                B = -B;
                return;
            }
            else if (bodyId == 1)
            {
                GCMoonData.Calculate(julianDate, out L, out B, out R);
                return;
            }
            else
            {
                GCAstronomyCoordPage page = null;
                int    b        = Convert.ToInt32(Math.Floor(julianDate));
                int    a        = b / GCAstronomyCoordPage.PAGE_SIZE;
                int    Base     = a * GCAstronomyCoordPage.PAGE_SIZE;
                int    Index    = b - Base + GCAstronomyCoordPage.PAGE_HEAD;
                double fraction = julianDate - b;

                if (pages.ContainsKey(a))
                {
                    page = pages[a];
                }
                else
                {
                    page = new GCAstronomyCoordPage(Base);
                    pages.Add(a, page);
                }

                if (!page.dataInit[bodyId])
                {
                    page.InitializePlanet(bodyId);
                }

                L = GCMath.putIn360(Interpolate(page.data[bodyId, Index - 2, 0],
                                                page.data[bodyId, Index - 1, 0], page.data[bodyId, Index, 0],
                                                page.data[bodyId, Index + 1, 0], page.data[bodyId, Index + 2, 0], fraction));
                B = Interpolate(page.data[bodyId, Index - 2, 1],
                                page.data[bodyId, Index - 1, 1], page.data[bodyId, Index, 1],
                                page.data[bodyId, Index + 1, 1], page.data[bodyId, Index + 2, 1], fraction);
                R = Interpolate(page.data[bodyId, Index - 2, 2],
                                page.data[bodyId, Index - 1, 2], page.data[bodyId, Index, 2],
                                page.data[bodyId, Index + 1, 2], page.data[bodyId, Index + 2, 2], fraction);
            }
        }
コード例 #2
0
        public static double GetRawLongitude(int bodyId, int julianDay)
        {
            double L, B, R;

            // for sun and moon calculate always fresh values
            if (bodyId == 0)
            {
                GCEarth.Calculate(julianDay, out L, out B, out R);
                return(GCMath.putIn360(L + 180));
            }
            else if (bodyId == 1)
            {
                GCMoonData.Calculate(julianDay, out L, out B, out R);
                return(L);
            }
            else
            {
                GCAstronomyCoordPage page = null;
                int b     = julianDay;
                int a     = b / GCAstronomyCoordPage.PAGE_SIZE;
                int Base  = a * GCAstronomyCoordPage.PAGE_SIZE;
                int Index = b - Base + GCAstronomyCoordPage.PAGE_HEAD;

                if (pages.ContainsKey(a))
                {
                    page = pages[a];
                }
                else
                {
                    page = new GCAstronomyCoordPage(Base);
                    pages.Add(a, page);
                }

                if (!page.dataInit[bodyId])
                {
                    page.InitializePlanet(bodyId);
                }

                return(page.data[bodyId, Index, 0]);
            }
        }