Почему этот расчет подшипника настолько неточный?

StackOverflow https://stackoverflow.com/questions/2232911

Вопрос

Это вообще настолько неточно?Я заново реализовал все это с произвольной точностью 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, а НЕ дуга широты между A и B.

Геодезические функции Mathematica определяют направление для ваших тестовых позиций следующим образом: 89.7061 и 270.294.

Итак, похоже, что (а) ваши расчеты верны, но (б) ваши навигационные навыки нуждаются в совершенствовании.

Другие советы

Вы уверены, что это связано с числовыми проблемами?Должен признаться, что я точно не знаю, что вы пытаетесь вычислить, но когда вы имеете дело с углами на сфере, возникают небольшие отклонения от того, что можно было бы ожидать в евклидовой геометрии.

java.lang.AssertionError:ожидалось:<270.0>, но было:<270.29389750911355>

Эта абсолютная ошибка 0,29 представляет собой относительную ошибку 0,1%.Как это «далеко»?

Плавающие числа дают 7 значащих цифр;двойки хороши для 16.Это могут быть тригонометрические функции или преобразование градусов в радианы.

Формула выглядит правильно, если этот источник стоит поверить.

Если я вставлю ваши начальные и конечные значения на эту страницу, они сообщат результат: 089°42′22″.Если я вычту ваш результат из 360 и переведу в градусы, минуты и секунды, ваш результат будет идентичен их.Либо вы оба правы, либо вы оба не правы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top