Bearing from one coordinate to another
bearing, geolocation, java
Solution
You just have your parentheses `()` in the wrong place.
You are adding degrees to a value in radians, which won't work. `toDegrees()` will do the conversion from radians to degrees for you, then you do the normalisation once you have a value in degrees.
You have:
Math.toDegrees( (Math.atan2(y, x))+360 ) % 360;
But you need:
( Math.toDegrees(Math.atan2(y, x)) + 360 ) % 360;
Remember also that all inputs to `Math.sin()`, `Math.cos()` and all the other trigonometric functions must be in radians. If your inputs are degrees you'll need to convert them using `Math.toRadians()` first.
Problem
I implemented the "bearing" formula from http://www.movable-type.co.uk/scripts/latlong.html. But it seems highly inaccurate - I suspect some mistakes in my implementation. Could you help me with finding it? My code is below: ``` protected static double bearing(double lat1, double lon1, double lat2, double lon2){ double longDiff= lon2-lon1; double y = Math.sin(longDiff)*Math.cos(lat2); double x = Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(longDiff); return Math.toDegrees((Math.atan2(y, x))+360)%360; } ```