private IEnumerable<DecimalGeoCoordinate> BuildLinePoints(double x1, double y1, double x2, double y2, int lineSegments) { List<DecimalGeoCoordinate> points = new List<DecimalGeoCoordinate>(); double dx = Math.Abs(x2 - x1); double dy = Math.Abs(y2 - y1); DecimalGeoCoordinate startPoint = new DecimalGeoCoordinate(x1, y1); DecimalGeoCoordinate endPoint = new DecimalGeoCoordinate(x2, y2); double lineIncrements = startPoint.DistanceTo(endPoint) / lineSegments; double xIncrement = (x2 > x1) ? dx / lineSegments : -(dx / lineSegments); double yIncrement = (y2 > y1) ? dy / lineSegments : -(dy / lineSegments); double currentX = startPoint.Latitude; double currentY = startPoint.Longitude; points.Add(startPoint); if (startPoint == endPoint) return points; for (double pointCount = 0; pointCount < lineSegments - 1; pointCount++) { currentX += xIncrement; currentY += yIncrement; points.Add(new DecimalGeoCoordinate(currentX, currentY)); } points.Add(endPoint); return points; }
public void DistanceTo_PassValidCoordinate_ReturnsCorrectDistance() { // Arrange DecimalGeoCoordinate testCoordinate = new DecimalGeoCoordinate(1.6, 15.0); _sut = new DecimalGeoCoordinate(11.2, 12.0); // Act double distance = _sut.DistanceTo(testCoordinate); // Assert Assert.IsTrue(Math.Truncate(distance) == 1117643); }