Thậm chí là không chính xác? Tôi đã nói lại toàn bộ điều đó với độ chính xác tùy ý của Apfloat và nó không tạo ra sự khác biệt nào mà tôi nên biết bắt đầu với !!Tại sao tính toán vòng bi này lại không chính xác?
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);
}
Khẳng định đầu tiên trong các thử nghiệm cho điều này:
java.lang.AssertionError: expected:<270.0> but was:<270.29389750911355>
0,29 dường như là một cách khá xa vời? Đây có phải là công thức tôi đã chọn để triển khai không?
Bạn có đang sử dụng bộ ba chính xác tùy ý không? –
bạn có thể thêm vàoRoman và toDegrees không? – Ron
Sử dụng chức năng trig java.lang.Math và nhập java.lang.Math.toDegrees tĩnh; nhập java.lang.Math.toRadian tĩnh; – Greg