Я продолжаю придумывать неправильные вычисления при использовании формулы Винсенти - PullRequest
1 голос
/ 18 ноября 2010

Я пытаюсь использовать формулу из (www.movable-type.co.uk/scripts/latlong.html), чтобы вернуть точку назначения с указанием начальной точки, расстояния и пеленга.Это мои значения:

int radius_km = 6371;
double d = 74.02;
double st_lat = 39.4450;
st_lat = Math.toRadians(st_lat); 
double bearing = 106.1607;
bearing = Math.toRadians(bearing);

double end_lat = Math.asin( Math.sin(st_lat)*Math.cos(d/radius_km) +
          Math.cos(st_lat)*Math.sin(d/radius_km)*Math.cos
          (bearing) );

end_lat = Math.toDegrees(end_lat);

Когда я ввожу d, st_lat и азимут на сайте, я получаю это: 39 ° 33′28 ″ с.ш.Когда я использую приведенный выше код (который я скопировал с веб-сайта), я получаю следующее: 39.25679699255662.

Я осмотрелся еще раз, и кто-то сказал, что деление может не вернуть десятичную сумму, поэтому я заменил деление на:

BigDecimal distance = new BigDecimal("74.02");
BigDecimal strradius = new BigDecimal("6371");
BigDecimal d2 = distance.divide(strradius, 6, RoundingMode.HALF_EVEN);
double d = d2.doubleValue();

и изменил формулу на:

end_lat=Math.asin(Math.sin(st_lat)*
 Math.cos(d)+Math.cos(st_lat)*Math.sin(d)*Math.cos(bearing));

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

1 Ответ

0 голосов
/ 18 ноября 2010

Вы уверены, что делаете правильные преобразования из минут / секунд в десятичные числа?

В градусе 60 минут, в минуте 60 секунд.Если начальная широта 39,4450;предполагая, что положительный означает к северу от экватора.Если предполагается, что азимут 106.1607 измерен с севера по часовой стрелке;будет означать, что вы путешествуете на юго-восток.

Вы сказали, что веб-сайт говорит вам, что ответ равен 39 ° 33′28 ″ с.ш., но если я переведу это значение в десятичное, это будет равно 39+ (33 + 28 /60) / 60 = 39,5578.Этот результат больше, чем ваша начальная точка, т. Е. Вы путешествуете на юго-восток, но заканчиваете к северу от своей точки.

Я еще не смотрел на математику в вашем коде, но со стороны я бы сказал, что выпроблема заключается в преобразовании минут / секунд в десятичные дроби и обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...