문제

그게 부정확 한가? 나는 Apfloat 임의의 정밀도로 모든 것을 다시 구현했으며, 시작하는 것으로 알고있는 차이가 없었습니다 !!

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);
 }

테스트의 첫 번째 주장은 다음과 같습니다.

java.lang.assertionerror : 예상 : <270.0>하지만 : <270.29389750911355>

0.29는 꽤 먼 길을 벗어난 것 같습니다. 이것이 내가 구현하기로 선택한 공식입니까?

도움이 되었습니까?

해결책

당신이 한 일을하고 정확하게 한 일을했다면 A에서 B로 가장 짧은 경로를 따라 B에서 A의 베어링을 알아 냈습니다. A와 B 사이의 위도선의 아크가 아닌 A와 B 사이의 큰 원입니다.

Mathematica의 측지 기능은 테스트 위치에 대해 베어링을 제공합니다. 89.7061 그리고 270.294.

따라서 (a) 계산이 정확하지만 (b) 항해 기술이 연마해야합니다.

다른 팁

이것이 숫자 문제로 인한 것이라고 확신합니까? 나는 당신이 무엇을 계산하려고하는지 정확히 알지 못하지만 구의 각도를 다룰 때 유클리드 형상에서 기대할 수있는 작은 편차를 인정해야합니다.

java.lang.assertionerror : 예상 : <270.0>하지만 : <270.29389750911355>

이 0.29 절대 오차는 0.1%의 상대 오차를 나타냅니다. 이것이 어떻게 "먼 길"입니까?

플로트는 7 개의 중요한 숫자를 줄 것입니다. 복식은 16에 적합합니다. 트리그 함수 또는 라디안 전환 정도 일 수 있습니다.

공식이 옳은 경우 이 소스 믿어야합니다.

시작과 최종 값을 해당 페이지에 연결하면보고 한 결과는 089 ° 42′22 ″입니다. 360에서 결과를 빼고 학위, 분, 초로 변환하면 결과는 동일합니다. 둘 다 맞거나 둘 다 틀 렸습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top