public void Brian_VerticaSquare_ShouldSucceed() { var endPosition = new CanePosition() { Latitude = 55.6760968, Longitude = 12.568337100000008, }.Dump("Start") .CalculateCurrentPosition(new[] { new SantaMovement() { Direction = SantaMovementDirection.Down, Unit = SantaMovementUnit.Meter, Value = 10000 } }).Dump("Move down 10 km") .CalculateCurrentPosition(new[] { new SantaMovement() { Direction = SantaMovementDirection.Right, Unit = SantaMovementUnit.Meter, Value = 10000 } }).Dump("Move right 10 km") .CalculateCurrentPosition(new[] { new SantaMovement() { Direction = SantaMovementDirection.Up, Unit = SantaMovementUnit.Meter, Value = 10000 } }).Dump("Move up 10 km") .CalculateCurrentPosition(new[] { new SantaMovement() { Direction = SantaMovementDirection.Left, Unit = SantaMovementUnit.Meter, Value = 10000 } }).Dump("Move left 10 km"); endPosition.Latitude.Should().Be(55.67609680); endPosition.Longitude.Should().Be(12.567972299220262); }
public void Hatch2_KnownMovementAndPos_ShouldSucceed() { var sut = new CanePosition() { Latitude = 71.639566053691, Longitude = -51.1902823595313 }.CalculateCurrentPosition(new[] { new SantaMovement() { Direction = SantaMovementDirection.Right, Unit = SantaMovementUnit.Meter, Value = 10000 }, new SantaMovement() { Direction = SantaMovementDirection.Down, Unit = SantaMovementUnit.Meter, Value = 7500 }, }); Math.Abs(sut.Latitude - 71.572192407382).Should().BeLessThan(0.0000000000001, sut.Latitude.ToJson()); Math.Abs(sut.Longitude - -50.9050972077072).Should().BeLessThan(0.0000000000001, sut.Longitude.ToJson()); }
public GeoPoint CalculateSantaPosition(bool flipXAndY = false) { double x = 0d; double y = 0d; foreach (Movement movement in SantaMovements) { double meters = movement.Unit.ToMeters(movement.Value); switch (movement.Direction) { case Direction.Up: y += meters; break; case Direction.Right: x += meters; break; case Direction.Down: y -= meters; break; case Direction.Left: x -= meters; break; default: throw new ArgumentOutOfRangeException(); } } return(flipXAndY ? CanePosition.MoveTo(y, x) : CanePosition.MoveTo(x, y)); }
public override string ToString() { return($"Id: {Id}, CanePosition: {CanePosition.ToString()}" + Environment.NewLine + $"Movements:" + Environment.NewLine + string.Join(",", SantaMovements)); }