private static Tuple <double, double> calculateCoord(Location origin, double brng, double arcLength) { double lat1 = ExtraMath.DegToRad(origin.Latitude); double lon1 = ExtraMath.DegToRad(origin.Longitude); double centralAngle = arcLength / earthRadius; double lat2 = Math.Asin(Math.Sin(lat1) * Math.Cos(centralAngle) + Math.Cos(lat1) * Math.Sin(centralAngle) * Math.Cos(ExtraMath.DegToRad(brng))); double lon2 = lon1 + Math.Atan2(Math.Sin(ExtraMath.DegToRad(brng)) * Math.Sin(centralAngle) * Math.Cos(lat1), Math.Cos(centralAngle) - Math.Sin(lat1) * Math.Sin(lat2)); return(new Tuple <double, double>(ExtraMath.RadToDeg(lat2), ExtraMath.RadToDeg(lon2))); }
private static double calculateBearing(Location A, Location B) { double lat1 = ExtraMath.DegToRad(B.Latitude); double lon1 = B.Longitude; double lat2 = ExtraMath.DegToRad(A.Latitude); double lon2 = A.Longitude; double dLon = ExtraMath.DegToRad(lon2 - lon1); double y = Math.Sin(dLon) * Math.Cos(lat2); double x = Math.Cos(lat1) * Math.Sin(lat2) - Math.Sin(lat1) * Math.Cos(lat2) * Math.Cos(dLon); double brng = (ExtraMath.RadToDeg(Math.Atan2(y, x)) + 360) % 360; return(brng); }
public void ExtraMaths_RadToDeg_ReturnsCorrectValue() { Assert.AreEqual(180, ExtraMath.RadToDeg(Math.PI)); }