Почему это переносит вычисление, таким образом неточное?

Это даже что неточно? Я re-implented все это с произвольной точностью 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 кажется вполне далеко? Действительно ли это - формула, которую я принял решение реализовать?

10
задан John Rasch 9 February 2010 в 22:16
поделиться

3 ответа

Если вы сделали то, что, похоже, сделали, и сделали это правильно, то вы вычислили пеленг A от B по кратчайшему пути от A до B, который на поверхности сферической (иш) Земли является дугой большого круга между A и B, а НЕ дугой линии широты между A и B.

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

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

16
ответ дан 3 December 2019 в 20:41
поделиться

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

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

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

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

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

1
ответ дан 3 December 2019 в 20:41
поделиться

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

1
ответ дан 3 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: