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()); }
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); } }
public Vector3D ToVector3D(Geodetic2D geodetic) { return ToVector3D(new Geodetic3D(geodetic.Longitude, geodetic.Latitude, 0.0)); }
public static Geodetic2D ToDegrees(Geodetic2D geodetic) { return new Geodetic2D(ToDegrees(geodetic.Longitude), ToDegrees(geodetic.Latitude)); }
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); }