Ist es überhaupt so ungenau? Ich habe die ganze Sache mit Apfloat willkürlich präzisiert und es machte keinen Unterschied, mit welchem ich hätte anfangen sollen !!Warum ist diese Berechnung so falsch?
public static double bearing(LatLng latLng1, LatLng latLng2) {
double deltaLong = toRadians(latLng2.longitude - latLng1.longitude);
double lat1 = toRadians(latLng1.latitude);
double lat2 = toRadians(latLng2.latitude);
double y = sin(deltaLong) * cos(lat2);
double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(deltaLong);
double result = toDegrees(atan2(y, x));
return (result + 360.0) % 360.0;
}
@Test
public void testBearing() {
LatLng first = new LatLng(36.0, 174.0);
LatLng second = new LatLng(36.0, 175.0);
assertEquals(270.0, LatLng.bearing(second, first), 0.005);
assertEquals(90.0, LatLng.bearing(first, second), 0.005);
}
Die erste Behauptung im Test ergibt dies:
java.lang.AssertionError: expected:<270.0> but was:<270.29389750911355>
0,29 off ziemlich langen Weg scheint? Ist das die Formel, die ich gewählt habe?
Verwenden Sie arbitrary-precision trig? –
können Sie toRadians und toDegrees hinzufügen? – Ron
Verwenden Sie die trigon Funktion java.lang.Math und importieren Sie static java.lang.Math.toDegrees; Import statisch java.lang.Math.toRadians; – Greg