private void UpdateForFollow2() { var firstboat = _world.Find <Boat>().First(); if (null == firstboat) { return; } var waypoint = firstboat.Autopilot.WayPoint; if (null == waypoint || waypoint.Reached) { return; } var vector = new AngularVector(firstboat.Location, waypoint.Location); var boattohalfway = new AngularVector(vector.Bearing, vector.Distance / 2); LookAt = firstboat.Location.GreatCircle(boattohalfway); var lookattocamera = new AngularVector(new Bearing(vector.Bearing + Angle.Pi), 3 * boattohalfway.Distance); var location = LookAt.GreatCircle(lookattocamera); var altitude = 3 * Ball.EarthSurfaceApproximation.Distance(lookattocamera.Distance / (2 * Angle.FromDegrees(45).Cos()) * Angle.FromDegrees(45).Sin()); Location = new Tuple <Coordinate, Length>(location, altitude); }
private void UpdateForFollow1() { var firstboat = _world.Find <Boat>().First(); if (null == firstboat) { return; } var waypoint = firstboat.Autopilot.WayPoint; if (null == waypoint || waypoint.Reached) { return; } var vector = new AngularVector(firstboat.Location, waypoint.Location); var boattocamera = new AngularVector(new Bearing(vector.Bearing + Angle.Pi), new Bearing(Ball.EarthSurfaceApproximation.Arc(Length.FromMeters(15)))); var boattohalfway = new AngularVector(vector.Bearing, vector.Distance / 2); LookAt = firstboat.Location.GreatCircle(boattohalfway); Location = new Tuple <Coordinate, Length>(firstboat.Location.GreatCircle(boattocamera), Length.FromMeters(3)); }
private void UpdateLocation(Time elapsedtime) { Length distancetravelled = Speed * elapsedtime; var v = new AngularVector(Bearing, Ball.EarthSurfaceApproximation.Arc(distancetravelled)); Location = Location.GreatCircle(v); }
public void EarthShouldCreateAngularVectorFromCartesianVector() { var cartesianvector = new CartesianVector(Length.FromMeters(0), Length.FromMeters(1)); AngularVector angularvector = Ball.EarthSurfaceApproximation.AngularVector(cartesianvector); Assert.IsTrue((angularvector.Bearing.Abs() - Bearing.North.Abs()).Abs() < Angle.FromDegrees(1e-6)); cartesianvector = new CartesianVector(Length.FromMeters(1), Length.FromMeters(0)); angularvector = Ball.EarthSurfaceApproximation.AngularVector(cartesianvector); Assert.IsTrue((angularvector.Bearing.Abs() - Bearing.East.Abs()).Abs() < Angle.FromDegrees(1e-6)); }
public void EarthShouldCreateCartesianVectorFromAngularVector() { var angularVector = new AngularVector(Bearing.North, Angle.FromDegrees(1)); CartesianVector cartesianVector = Ball.EarthSurfaceApproximation.Cartesian(angularVector); Assert.IsTrue(cartesianVector.X == Length.Zero); Assert.IsTrue(cartesianVector.Y > Length.Zero); angularVector = new AngularVector(Bearing.East, Angle.FromDegrees(1)); cartesianVector = Ball.EarthSurfaceApproximation.Cartesian(angularVector); Assert.IsTrue(cartesianVector.X > Length.Zero); Assert.IsTrue(cartesianVector.Y < Length.FromMeters(1E-10)); }
public void ShouldVectorGreatCirclesWell() { var vector = new AngularVector(Ourhouse, PointRobertsMarina); Coordinate newlocation = Ourhouse.GreatCircle(vector); Length distance = Ball.EarthSurfaceApproximation.Distance(newlocation, PointRobertsMarina); Assert.IsTrue(distance < Length.FromMeters(.5)); vector = new AngularVector(Ourhouse, MammasHuis); newlocation = Ourhouse.GreatCircle(vector); distance = Ball.EarthSurfaceApproximation.Distance(newlocation, MammasHuis); Assert.IsTrue(distance < Length.FromMeters(.5)); }
public void ShouldVectorRhumbWell() { var vector = new AngularVector(Ourhouse, PointRobertsMarina); Coordinate newlocation = Ourhouse.Rhumb(vector); Length distance = Ball.EarthSurfaceApproximation.Distance(newlocation, PointRobertsMarina); Assert.IsTrue(distance < Length.FromMeters(.5)); vector = new AngularVector(Ourhouse, PottsburgCrossing); newlocation = Ourhouse.Rhumb(vector); distance = Ball.EarthSurfaceApproximation.Distance(newlocation, PottsburgCrossing); Assert.IsFalse(distance < Length.FromMeters(.5)); }
public CartesianVector ToCartesian(Coordinate coordinate) { var vector = new AngularVector(_modelcenter, coordinate); return(_earth.Cartesian(vector)); }