I’m trying to compute the distance in kilometres of the Great Circle using Haversine formula in Java as shown below
/* Program to demonstrate the Floating-point numbers and the Math library. * The great-circle distance is the length of the shortest path between two points (x1,y1) and (x2,y2) on the surface of a sphere, where the path is constrained to be along the surface.*/ public class GreatCircle { public static void main(String[] args) { double r = 6371.0; // Equatorial radius of the Earth double x1 = Math.toRadians(Double.parseDouble(args[0])); double y1 = Math.toRadians(Double.parseDouble(args[1])); double x2 = Math.toRadians(Double.parseDouble(args[2])); double y2 = Math.toRadians(Double.parseDouble(args[3])); // Compute using Haversine formula double distance = 2 * r * Math.asin(Math.sqrt(Math.pow(Math.sin((x2 - x1) / 2),2 + Math.cos(x2) * Math.pow(Math.sin((y2 - y1) / 2),2))); // Output the distance System.out.println(distance + " kilometers "); } }
I’m running with input java GreatCircle 60.0 15.0 120.0 105.0
. The expected output is 4604.53989281927 kilometers
, But I get 13406.238676180266 kilometers
. Could someone please point out where am I going wrong?
Advertisement
Answer
The formula was implemented incorrectly. It worked after making the following corrections. In the formula, we are taking the arc sin of the entire expression.
// Compute using Haversine formula double distance = 2 * r * Math.asin(Math.sqrt(Math.pow(Math.sin((x2 - x1) / 2),2 + Math.cos(x2) * Math.pow(Math.sin((y2 - y1) / 2),2))); // Output the distance System.out.println(distance + " kilometers "); } }