Exemplo n.º 1
0
        public void AbsoluteDistanceTo_Metric()
        {
            var man   = new HealpixManager(0);
            var basin = man.GetCenter <Basin3>(0);

            Assert.AreEqual(0, basin.Intersect(basin));
            Assert.AreEqual(0, basin.S_q.AbsoluteDistanceTo(basin.Q3));
            var toBasin  = man.GetCenter <Basin3>(1);
            var from0to1 = basin.S_q.AbsoluteDistanceTo(toBasin.Q3);
            var from1to0 = toBasin.S_q.AbsoluteDistanceTo(basin.Q3);

            Assert.AreEqual(from1to0, from0to1, 1);
            basin   = man.GetCenter <Basin3>(4);
            toBasin = man.GetCenter <Basin3>(7);
            Assert.AreEqual(
                basin.S_q.AbsoluteDistanceTo(toBasin.Q3),
                toBasin.S_q.AbsoluteDistanceTo(basin.Q3),
                .0001);

            man     = new HealpixManager(1);
            basin   = man.GetCenter <Basin3>(0);
            toBasin = man.GetCenter <Basin3>(4);

            // basin.SetKQQaxis(0, man);
            // toBasin.SetKQQaxis(0, man);
            Assert.AreEqual(
                basin.S_q.AbsoluteDistanceTo(toBasin.Q3),
                toBasin.S_q.AbsoluteDistanceTo(basin.Q3),
                1100); //// .0001 better
        }
Exemplo n.º 2
0
 private static void TestAll(HealpixManager man)
 {
     for (int p = 0; p < man.Npix; p++)
     {
         Assert.AreEqual(
             p,
             man.GetCenter <HealCoor>(man.GetCenter <HealCoor>(p).Symmetric(man).P).Symmetric(man).P);
     }
 }
Exemplo n.º 3
0
        public void SetUp()
        {
            var man = new HealpixManager(2);

            basin0  = man.GetCenter <Basin3>(0);
            basin7  = man.GetCenter <Basin3>(7);
            basin31 = man.GetCenter <Basin3>(31);
            basin77 = man.GetCenter <Basin3>(77);
            basin95 = man.GetCenter <Basin3>(95);
        }
Exemplo n.º 4
0
        public void GetCenter_5()
        {
            var man = new HealpixManager(5);

            for (int p = 24; p < 24 + man.PixelsCountInRing(4); p++)
            {
                Assert.AreEqual(4, man.GetCenter(p).Ring);
                Assert.AreEqual(84.15, man.GetCenter(p).Y, .001);
            }
            Assert.AreEqual(3, man.GetCenter(18).Ring);
        }
Exemplo n.º 5
0
        public WaterAndBottomData(HealpixManager man, double?min = null, double?max = null) : base(man, min, max)
        {
            ColorsMiddle = 0;

            var p = 0;

            for (var ring = 1; ring <= MaxRing; ring++)
            {
                var basin            = PixMan.Pixels[ring - 1];
                var waterHeightAll   = 0d;
                var surfaceHeightAll = 0d;
                var pixelsInRing     = HealpixManager.PixelsCountInRing(ring);
                for (var inRing = 1; inRing < pixelsInRing; inRing++, p++)
                {
                    var coor = HealpixManager.GetCenter <HealCoor>(p);

                    int waterHeight;
                    surfaceHeightAll += GetHeights(coor, (int)basin.rOfEllipse, out waterHeight);
                    waterHeightAll   += waterHeight;
                }

                if (waterHeightAll > 0)
                {
                    basin.hOQ   = 0;
                    basin.Depth = waterHeightAll / pixelsInRing;
                }
                else
                {
                    basin.hOQ   = surfaceHeightAll / pixelsInRing;
                    basin.Depth = -surfaceHeightAll / pixelsInRing;
                }
            }

            CheckOcean();
        }
Exemplo n.º 6
0
        public static void DoWork()
        {
            var man   = new HealpixManager(2);
            var world = new World(man);

            using (var reliefSur = new Earth2014Manager(ReliefType.Sur))
            {
                using (var reliefBed = new Earth2014Manager(ReliefType.Bed))
                {
                    using (var reliefIce = new Earth2014Manager(ReliefType.Ice))
                    {
                        for (var p = 0; p < man.Npix; p++)
                        {
                            var coor           = man.GetCenter(p);
                            var surface        = reliefSur.GetAltitude(coor);
                            var bed            = reliefBed.GetAltitude(coor);
                            var relativeHeight = bed - surface;
                            if (relativeHeight != 0)
                            {
                                // water or ice
                                var ice = reliefIce.GetAltitude(coor);
                                if (ice == 0)
                                {
                                    // lakes in ice are ignored
                                    world.AddWater(coor, bed, surface);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 7
0
        internal override void PreInit(HealpixManager man)
        {
            base.PreInit(man);
            var northRingPixel = man.GetCenter(Math.Max(1, P - PixelInRing));

            lQn2 = (Beta.Value - northRingPixel.Beta.Value) * rOfEllipse / 2;
        }
Exemplo n.º 8
0
        public void Symmetric()
        {
            var man   = new HealpixManager(0);
            var basin = man.GetCenter <HealCoor>(0);

            Assert.AreEqual(9, basin.Symmetric(man).P);
            Assert.AreEqual(7, man.GetCenter <HealCoor>(5).Symmetric(man).P);
            Assert.AreEqual(4, man.GetCenter <HealCoor>(4).Symmetric(man).P);
            Assert.AreEqual(5, man.GetCenter <HealCoor>(7).Symmetric(man).P);
            Assert.AreEqual(6, man.GetCenter <HealCoor>(6).Symmetric(man).P);

            TestAll(man);

            TestAll(new HealpixManager(1));
            TestAll(new HealpixManager(2));
            TestAll(new HealpixManager(3));
            TestAll(new HealpixManager(4));
        }
Exemplo n.º 9
0
        private static T[] GetBasins(HealpixManager man)
        {
            var pix = new List <T>();
            T   last;

            for (var south = man.Npix - 3; south > 0; south = man.Neibors.NorthMean(last))
            {
                last = man.GetCenter <T>(south);
                pix.Add(last);
            }
            pix.Reverse(); //GetAltitude looks for northbasin
            return(pix.ToArray());
        }
Exemplo n.º 10
0
 public PixelsManager(HealpixManager healpixManager, T[] pix = null)
 {
     HealpixManager = healpixManager;
     if (pix == null)
     {
         Pixels = new T[healpixManager.Npix];
         for (var p = 0; p < healpixManager.Npix; p++)
         {
             Pixels[p] = healpixManager.GetCenter <T>(p);
         }
     }
     else
     {
         Pixels = pix;
     }
 }
Exemplo n.º 11
0
        private MeridianWater <MeridianCoor> GetData(
            bool fullMeridian     = false,
            bool excite           = false,
            BottomForm bottomForm = BottomForm.No)
        {
            var man = new HealpixManager(9); //2 is good too

            northBasin = man.GetCenter <MeridianCoor>(0);
            basin      = man.GetCenter <MeridianCoor>(4);
            southBasin = man.GetCenter <MeridianCoor>(12);
            var pix = fullMeridian
                      // -.=.=.-
                ? new[] { northBasin, basin, southBasin }
            // -.=.-
                : new[] { northBasin, basin };

            var data = new MeridianWater <MeridianCoor>(man, pix, false);

            data.GradientAndHeightCrosses();
            if (excite)
            {
                //data.Water.Move()
                basin.hOQ = HeightExcitement;
                data.GradientAndHeightCrosses();
            }
            switch (bottomForm)
            {
            case BottomForm.Shallow:
                foreach (var t in pix)
                {
                    t.Depth = 0;
                }
                break;

            case BottomForm.InDepth:
                foreach (var t in pix)
                {
                    t.Depth = HeightExcitement;
                }
                break;

            case BottomForm.BasinExcited:
                foreach (var t in pix)
                {
                    t.Depth = t == basin
                            ? -HeightExcitement
                            : HeightExcitement;
                }
                break;

            case BottomForm.BasinInDepth:
                foreach (var t in pix)
                {
                    t.Depth = t == basin ? HeightExcitement : 0;
                }
                break;

            case BottomForm.ShallowSouth:
                foreach (var t in pix)
                {
                    t.Depth = t == southBasin ? 0 : HeightExcitement;
                }
                break;

            case BottomForm.NorthBasinInDepth:
                northBasin.Depth = HeightExcitement;
                basin.Depth      = -HeightExcitement;
                southBasin.Depth = 0;
                break;

            case BottomForm.ReliefLikeWater:
                foreach (var t in pix)
                {
                    t.Depth = (int)-t.hOQ;
                }
                break;
            }
            return(data);
        }
Exemplo n.º 12
0
        private HealpixManager healpixManager; /*very temp*/

        public Basin3 Center(int p)
        {
            return(healpixManager.GetCenter <Basin3>(p));
        }
Exemplo n.º 13
0
        public void GetCenter_2()
        {
            var man = new HealpixManager(2);

            Assert.AreEqual(135, man.GetCenter(0).X);
            Assert.AreEqual(22.5, man.GetCenter(7).X);

            Assert.AreEqual(3, man.GetCenter(18).Ring);
            Assert.AreEqual(15, man.GetCenter(17).X, .0000001);
            Assert.AreEqual(-15, man.GetCenter(18).X, .0000001);

            Assert.AreEqual(4, man.GetCenter(29).Ring);
            Assert.AreEqual(11.25, man.GetCenter(31).X, .0000001);
            Assert.AreEqual(-11.25, man.GetCenter(32).X, .0000001);

            Assert.AreEqual(5, man.GetCenter(47).Ring);
            Assert.AreEqual(0, man.GetCenter(47).X);

            Assert.AreEqual(null, man.GetCenter(47).NorthCap);
            Assert.AreEqual(11.25, man.GetCenter(63).X, .00001);
            Assert.AreEqual(-11.25, man.GetCenter(64).X, .00001);
            Assert.AreEqual(0, man.GetCenter(79).X);
            Assert.AreEqual(-180, man.GetCenter(87).X);
            Assert.AreEqual(168.75, man.GetCenter(88).X);
            Assert.AreEqual(0, man.GetCenter(88).Y);
            Assert.AreEqual(11.25, man.GetCenter(95).X, .00001);
            Assert.AreEqual(-168.75, man.GetCenter(103).X);
            Assert.AreEqual(0, man.GetCenter(111).X);
            Assert.AreEqual(-180, man.GetCenter(119).X);
            Assert.AreEqual(168.75, man.GetCenter(120).X);
            Assert.AreEqual(11.25, man.GetCenter(127).X, .00001);
            Assert.AreEqual(-11.25, man.GetCenter(128).X, .00001);
            Assert.AreEqual(10, man.GetCenter(135).Ring);
            Assert.AreEqual(-168.75, man.GetCenter(135).X);
            Assert.AreEqual(157.5, man.GetCenter(136).X);
            Assert.AreEqual(135, man.GetCenter(137).X);
            Assert.AreEqual(0, man.GetCenter(143).X);
            Assert.AreEqual(11, man.GetCenter(151).Ring);
            Assert.AreEqual(-180, man.GetCenter(151).X);

            Assert.AreEqual(false, man.GetCenter(152).NorthCap);
            Assert.AreEqual(12, man.GetCenter(152).Ring);
            Assert.AreEqual(168.75, man.GetCenter(152).X);
            Assert.AreEqual(11.25, man.GetCenter(159).X, .00001);
            Assert.AreEqual(-168.75, man.GetCenter(167).X);

            Assert.AreEqual(13, man.GetCenter(168).Ring);
            Assert.AreEqual(165, man.GetCenter(168).X);

            Assert.AreEqual(14, man.GetCenter(187).Ring);
            Assert.AreEqual(157.5, man.GetCenter(180).X, .00001);
            Assert.AreEqual(-112.5, man.GetCenter(186).X, .00001);
            Assert.AreEqual(-157.5, man.GetCenter(187).X, .00001);
            Assert.AreEqual(15, man.GetCenter(188).Ring);
            Assert.AreEqual(135, man.GetCenter(188).X, .00001);
        }
Exemplo n.º 14
0
        public void GetCenter_1()
        {
            var man = new HealpixManager(1);

            Assert.AreEqual(135, man.GetCenter(0).X);
            Assert.AreEqual(66.44, man.GetCenter(0).Y, .01);
            Assert.AreEqual(1, man.GetCenter(0).Ring);
            Assert.AreEqual(157.5, man.GetCenter(4).X);
            Assert.AreEqual(L41, man.GetCenter(4).Y, .01);
            Assert.AreEqual(2, man.GetCenter(4).Ring);
            Assert.AreEqual(67.5, man.GetCenter(6).X);
            Assert.AreEqual(-22.5, man.GetCenter(8).X, .00001);

            Assert.AreEqual(135, man.GetCenter(12).X);
            Assert.AreEqual(19.47, man.GetCenter(12).Y, .01);
            Assert.AreEqual(3, man.GetCenter(12).Ring);
            Assert.AreEqual(90, man.GetCenter(13).X);
            Assert.AreEqual(45, man.GetCenter(14).X);
            Assert.AreEqual(0, man.GetCenter(15).X);
            Assert.AreEqual(-45, man.GetCenter(16).X);
            Assert.AreEqual(-135, man.GetCenter(18).X);
            Assert.AreEqual(-180, man.GetCenter(19).X);
            Assert.AreEqual(157.5, man.GetCenter(20).X);
            Assert.AreEqual(0, man.GetCenter(20).Y);
            Assert.AreEqual(4, man.GetCenter(20).Ring);
            Assert.AreEqual(112.5, man.GetCenter(21).X);
            Assert.AreEqual(67.5, man.GetCenter(22).X);
            Assert.AreEqual(22.5, man.GetCenter(23).X);
            Assert.AreEqual(-22.5, man.GetCenter(24).X, .1);
            Assert.AreEqual(-67.5, man.GetCenter(25).X, .1);
            Assert.AreEqual(-112.5, man.GetCenter(26).X, .1);
            Assert.AreEqual(-157.5, man.GetCenter(27).X, .1);
            Assert.AreEqual(4, man.GetCenter(27).Ring);
            Assert.AreEqual(135, man.GetCenter(28).X);
            Assert.AreEqual(-19.47, man.GetCenter(28).Y, .01);
            Assert.AreEqual(5, man.GetCenter(28).Ring);
            Assert.AreEqual(45, man.GetCenter(30).X);
            Assert.AreEqual(0, man.GetCenter(31).X);
            Assert.AreEqual(-180, man.GetCenter(35).X);
            Assert.AreEqual(null, man.GetCenter(35).NorthCap);

            Assert.AreEqual(false, man.GetCenter(36).NorthCap);
            Assert.AreEqual(157.5, man.GetCenter(36).X);
            Assert.AreEqual(-L41, man.GetCenter(36).Y, .01);
            Assert.AreEqual(6, man.GetCenter(36).Ring);
            Assert.AreEqual(112.5, man.GetCenter(37).X);
            Assert.AreEqual(22.5, man.GetCenter(39).X);
            Assert.AreEqual(-22.5, man.GetCenter(40).X, .0000001);
            Assert.AreEqual(-112.5, man.GetCenter(42).X, .00000001);
            Assert.AreEqual(-157.5, man.GetCenter(43).X, .00000001);
            Assert.AreEqual(135, man.GetCenter(44).X);
            Assert.AreEqual(-66.44, man.GetCenter(44).Y, .01);
            Assert.AreEqual(7, man.GetCenter(44).Ring);
            Assert.AreEqual(45, man.GetCenter(45).X);
            Assert.AreEqual(-135, man.GetCenter(47).X);
        }
Exemplo n.º 15
0
        public void GetCenter_0()
        {
            var man = new HealpixManager(0);

            Assert.AreEqual(135, man.GetCenter(0).X);
            Assert.AreEqual(L41, man.GetCenter(0).Y, .01);
            Assert.AreEqual(45, man.GetCenter(1).X);
            Assert.AreEqual(L41, man.GetCenter(1).Y, .01);
            Assert.AreEqual(-45, man.GetCenter(2).X);
            Assert.AreEqual(L41, man.GetCenter(2).Y, .01);
            Assert.AreEqual(-135, man.GetCenter(3).X);
            Assert.AreEqual(L41, man.GetCenter(3).Y, .01);

            Assert.AreEqual(90, man.GetCenter(4).X);
            Assert.AreEqual(0, man.GetCenter(4).Y);
            Assert.AreEqual(0, man.GetCenter(5).X);
            Assert.AreEqual(0, man.GetCenter(5).Y);
            Assert.AreEqual(2, man.GetCenter(5).Ring);
            Assert.AreEqual(2, man.GetCenter(5).PixelInRing);
            Assert.AreEqual(-90, man.GetCenter(6).X);
            Assert.AreEqual(0, man.GetCenter(6).Y);
            Assert.AreEqual(2, man.GetCenter(6).Ring);
            Assert.AreEqual(3, man.GetCenter(6).PixelInRing);
            Assert.AreEqual(-180, man.GetCenter(7).X);
            Assert.AreEqual(0, man.GetCenter(7).Y);

            Assert.AreEqual(135, man.GetCenter(8).X);
            Assert.AreEqual(-L41, man.GetCenter(8).Y, .01);
            Assert.AreEqual(3, man.GetCenter(8).Ring);
            Assert.AreEqual(1, man.GetCenter(8).PixelInRing);
            Assert.AreEqual(45, man.GetCenter(9).X);
            Assert.AreEqual(-L41, man.GetCenter(9).Y, .01);
            Assert.AreEqual(-45, man.GetCenter(10).X);
            Assert.AreEqual(-L41, man.GetCenter(10).Y, .01);
            Assert.AreEqual(-135, man.GetCenter(11).X);
            Assert.AreEqual(-L41, man.GetCenter(11).Y, .01);
        }