public void TestGetHashCode()
        {
            Geodetic2D a = new Geodetic2D(1.0, 2.0);
            Geodetic2D b = new Geodetic2D(2.0, 3.0);
            Geodetic2D c = new Geodetic2D(2.0, 3.0);

            Assert.AreEqual(b.GetHashCode(), c.GetHashCode());
            Assert.AreNotEqual(a.GetHashCode(), b.GetHashCode());
            Assert.AreNotEqual(a.GetHashCode(), c.GetHashCode());
        }
Exemple #2
0
        public bool testwindowsCoordOnEllipse(Vector2 pos, out Geodetic2D geo)
        {
            var rayVector = Unproject(new Vector3(pos.X, this._windowHeight - pos.Y, 0), this.ProjectionMatrix, this.ViewMatrix, Matrix4x4.Identity);
            //此rayVector为近裁剪面的世界坐标,与eye相减得到ray向量,ray向量与地球求交即可得到结果
            //计算是否与地球有交
            var rayDir = rayVector - _positon;
            var result = Shape.Intersections(_positon, rayDir);

            //计算第一个相交点的世界坐标
            if (result.Length != 0)
            {
                Vector3 deta     = Vector3.Normalize(rayDir) * (float)result[0];
                Vector3 position = _positon + deta;
                geo = Shape.ToGeodetic2D(position);
                return(true);
            }
            geo = new Geodetic2D();
            return(false);
        }
        public void TestEquals()
        {
            Geodetic2D a = new Geodetic2D(1.0, 2.0);
            Geodetic2D b = new Geodetic2D(2.0, 3.0);
            Geodetic2D c = new Geodetic2D(2.0, 3.0);

            object objA = a;
            object objB = b;
            object objC = c;

            Assert.IsTrue(a.Equals(a));
            Assert.IsTrue(b.Equals(c));
            Assert.IsTrue(a.Equals(objA));
            Assert.IsTrue(b.Equals(objC));
            Assert.IsTrue(objA.Equals(objA));
            Assert.IsTrue(objB.Equals(objC));

            Assert.IsTrue(b == c);
            Assert.IsTrue(c == b);
            Assert.IsTrue(a != b);

            Assert.IsFalse(a.Equals(b));
            Assert.IsFalse(a.Equals(c));

            Assert.IsFalse(a.Equals(objB));
            Assert.IsFalse(a.Equals(objC));

            Assert.IsFalse(objA.Equals(objB));
            Assert.IsFalse(objA.Equals(objC));

            Assert.IsFalse(a == b);
            Assert.IsFalse(a == c);
            Assert.IsFalse(b != c);

            Assert.IsFalse(a.Equals(null));
            Assert.IsFalse(a.Equals(5));
        }
        public void PreRender(Context context, SceneState sceneState)
        {
            if (!_lodUpdateEnabled)
                return;

            _clipmapCenter = _ellipsoid.ToGeodetic3D(sceneState.Camera.Eye);

            //Geodetic2D center = Ellipsoid.ScaledWgs84.ToGeodetic2D(sceneState.Camera.Target / Ellipsoid.Wgs84.MaximumRadius);
            Geodetic2D center = new Geodetic2D(_clipmapCenter.Longitude, _clipmapCenter.Latitude);
            double centerLongitude = Trig.ToDegrees(center.Longitude);
            double centerLatitude = Trig.ToDegrees(center.Latitude);

            ClipmapLevel level = _clipmapLevels[_clipmapLevels.Length - 1];
            double longitudeIndex = level.Terrain.LongitudeToIndex(centerLongitude);
            double latitudeIndex = level.Terrain.LatitudeToIndex(centerLatitude);
            double imageryLongitudeIndex = level.Imagery.LongitudeToIndex(centerLongitude);
            double imageryLatitudeIndex = level.Imagery.LatitudeToIndex(centerLatitude);

            int west = (int)(longitudeIndex - _clipmapPosts / 2);
            if ((west % 2) != 0)
            {
                ++west;
            }
            int south = (int)(latitudeIndex - _clipmapPosts / 2);
            if ((south % 2) != 0)
            {
                ++south;
            }

            int imageryWest = (int)(imageryLongitudeIndex - level.ImageryWidth / 2);
            int imagerySouth = (int)(imageryLatitudeIndex - level.ImageryHeight / 2);

            level.NextExtent.West = west;
            level.NextExtent.East = west + _clipmapSegments;
            level.NextExtent.South = south;
            level.NextExtent.North = south + _clipmapSegments;

            level.NextImageryExtent.West = imageryWest;
            level.NextImageryExtent.East = imageryWest + level.ImageryWidth;
            level.NextImageryExtent.South = imagerySouth;
            level.NextImageryExtent.North = imagerySouth + level.ImageryHeight;

            UpdateOriginInTextures(level);
            UpdateImageryOriginInTextures(level);

            for (int i = _clipmapLevels.Length - 2; i >= 0; --i)
            {
                level = _clipmapLevels[i];
                ClipmapLevel finerLevel = _clipmapLevels[i + 1];

                // Terrain
                level.NextExtent.West = finerLevel.NextExtent.West / 2 - _fillPatchSegments;
                level.OffsetStripOnEast = (level.NextExtent.West % 2) == 0;
                if (!level.OffsetStripOnEast)
                {
                    --level.NextExtent.West;
                }
                level.NextExtent.East = level.NextExtent.West + _clipmapSegments;

                level.NextExtent.South = finerLevel.NextExtent.South / 2 - _fillPatchSegments;
                level.OffsetStripOnNorth = (level.NextExtent.South % 2) == 0;
                if (!level.OffsetStripOnNorth)
                {
                    --level.NextExtent.South;
                }
                level.NextExtent.North = level.NextExtent.South + _clipmapSegments;

                // Imagery
                imageryWest = (int)level.Imagery.LongitudeToIndex(level.Terrain.IndexToLongitude(level.NextExtent.West));
                imagerySouth = (int)level.Imagery.LatitudeToIndex(level.Terrain.IndexToLatitude(level.NextExtent.South));

                level.NextImageryExtent.West = imageryWest;
                level.NextImageryExtent.East = imageryWest + level.ImageryWidth - 1;
                level.NextImageryExtent.South = imagerySouth;
                level.NextImageryExtent.North = imagerySouth + level.ImageryHeight - 1;

                UpdateOriginInTextures(level);
                UpdateImageryOriginInTextures(level);
            }

            _updater.ApplyNewData(context);

            for (int i = 0; i <_clipmapLevels.Length; ++i)
            {
                ClipmapLevel thisLevel = _clipmapLevels[i];
                ClipmapLevel coarserLevel = _clipmapLevels[i > 0 ? i - 1 : 0];

                _updater.RequestTileResidency(context, thisLevel);
                UpdateTerrain(thisLevel, coarserLevel, context, sceneState);
                UpdateImagery(thisLevel, coarserLevel, context, sceneState);
            }
        }
Exemple #5
0
 public Vector3D ToVector3D(Geodetic2D geodetic)
 {
     return ToVector3D(new Geodetic3D(geodetic.Longitude, geodetic.Latitude, 0.0));
 }
Exemple #6
0
 public static Geodetic2D ToDegrees(Geodetic2D geodetic)
 {
     return new Geodetic2D(ToDegrees(geodetic.Longitude), ToDegrees(geodetic.Latitude));
 }
Exemple #7
0
        public void PreRender(Context context, SceneState sceneState)
        {
            if (!_lodUpdateEnabled)
            {
                return;
            }

            _clipmapCenter = _ellipsoid.ToGeodetic3D(sceneState.Camera.Eye);

            //Geodetic2D center = Ellipsoid.ScaledWgs84.ToGeodetic2D(sceneState.Camera.Target / Ellipsoid.Wgs84.MaximumRadius);
            Geodetic2D center          = new Geodetic2D(_clipmapCenter.Longitude, _clipmapCenter.Latitude);
            double     centerLongitude = Trig.ToDegrees(center.Longitude);
            double     centerLatitude  = Trig.ToDegrees(center.Latitude);

            ClipmapLevel level                 = _clipmapLevels[_clipmapLevels.Length - 1];
            double       longitudeIndex        = level.Terrain.LongitudeToIndex(centerLongitude);
            double       latitudeIndex         = level.Terrain.LatitudeToIndex(centerLatitude);
            double       imageryLongitudeIndex = level.Imagery.LongitudeToIndex(centerLongitude);
            double       imageryLatitudeIndex  = level.Imagery.LatitudeToIndex(centerLatitude);

            int west = (int)(longitudeIndex - _clipmapPosts / 2);

            if ((west % 2) != 0)
            {
                ++west;
            }
            int south = (int)(latitudeIndex - _clipmapPosts / 2);

            if ((south % 2) != 0)
            {
                ++south;
            }

            int imageryWest  = (int)(imageryLongitudeIndex - level.ImageryWidth / 2);
            int imagerySouth = (int)(imageryLatitudeIndex - level.ImageryHeight / 2);

            level.NextExtent.West  = west;
            level.NextExtent.East  = west + _clipmapSegments;
            level.NextExtent.South = south;
            level.NextExtent.North = south + _clipmapSegments;

            level.NextImageryExtent.West  = imageryWest;
            level.NextImageryExtent.East  = imageryWest + level.ImageryWidth;
            level.NextImageryExtent.South = imagerySouth;
            level.NextImageryExtent.North = imagerySouth + level.ImageryHeight;

            UpdateOriginInTextures(level);
            UpdateImageryOriginInTextures(level);

            for (int i = _clipmapLevels.Length - 2; i >= 0; --i)
            {
                level = _clipmapLevels[i];
                ClipmapLevel finerLevel = _clipmapLevels[i + 1];

                // Terrain
                level.NextExtent.West   = finerLevel.NextExtent.West / 2 - _fillPatchSegments;
                level.OffsetStripOnEast = (level.NextExtent.West % 2) == 0;
                if (!level.OffsetStripOnEast)
                {
                    --level.NextExtent.West;
                }
                level.NextExtent.East = level.NextExtent.West + _clipmapSegments;

                level.NextExtent.South   = finerLevel.NextExtent.South / 2 - _fillPatchSegments;
                level.OffsetStripOnNorth = (level.NextExtent.South % 2) == 0;
                if (!level.OffsetStripOnNorth)
                {
                    --level.NextExtent.South;
                }
                level.NextExtent.North = level.NextExtent.South + _clipmapSegments;

                // Imagery
                imageryWest  = (int)level.Imagery.LongitudeToIndex(level.Terrain.IndexToLongitude(level.NextExtent.West));
                imagerySouth = (int)level.Imagery.LatitudeToIndex(level.Terrain.IndexToLatitude(level.NextExtent.South));

                level.NextImageryExtent.West  = imageryWest;
                level.NextImageryExtent.East  = imageryWest + level.ImageryWidth - 1;
                level.NextImageryExtent.South = imagerySouth;
                level.NextImageryExtent.North = imagerySouth + level.ImageryHeight - 1;

                UpdateOriginInTextures(level);
                UpdateImageryOriginInTextures(level);
            }

            _updater.ApplyNewData(context);

            for (int i = 0; i < _clipmapLevels.Length; ++i)
            {
                ClipmapLevel thisLevel    = _clipmapLevels[i];
                ClipmapLevel coarserLevel = _clipmapLevels[i > 0 ? i - 1 : 0];

                _updater.RequestTileResidency(context, thisLevel);
                UpdateTerrain(thisLevel, coarserLevel, context, sceneState);
                UpdateImagery(thisLevel, coarserLevel, context, sceneState);
            }
        }
 public void Construct()
 {
     Geodetic2D a = new Geodetic2D(1.0, 2.0);
     Assert.AreEqual(1.0, a.Longitude);
     Assert.AreEqual(2.0, a.Latitude);
 }