Java: вопросы о радианах, Math.cos, Math.sin, double и long - PullRequest
10 голосов
/ 05 марта 2011

Мне нужно реализовать расстояние уборки в моем коде Java.

Я нашел этот фрагмент в Javascript, и мне нужно преобразовать его в Java.

  1. Как я могу конвертироватьширота и долгота в радианах в Java?
  2. Math.sin хочет удвоить в Java.Должен ли я передать ранее преобразованное значение в радианах или нет?
  3. Math.sin и Math.cos возвращают long.Должен ли я объявить как долго и передать его в Math.sqrt или преобразовать его в double?

спасибо

dLat = (lat2-lat1).toRad();
dLon = (lng2-lng1).toRad(); 
a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
    Math.sin(dLon/2) * Math.sin(dLon/2); 
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
d = R * c;
return d;

Ответы [ 3 ]

7 голосов
/ 05 марта 2011

Прежде всего, вы должны прочитать Javadoc. sin (double) принимает параметр double, который является углом в радианах, как указано в документации.На связанной странице вы также найдете, что sqrt также принимает удвоение.

Тогда вы должны знать, что Java может выполнять неразрушающее преобразование автоматически.Поэтому, если метод принимает удвоение, а у вас длинное, это не составит проблемы, так как при преобразовании длинных нет потерь -> удваивается.Обратное неверно, поэтому Java отказывается от компиляции.

Для преобразования в радианы вы найдете метод toRadians в классе Math.

5 голосов
/ 05 марта 2011
  1. Если у вас есть значение в градусах, просто наберите degrees * Math.PI / 180. Или лучше использовать функцию, предложенную coobird в комментарии (не знал об этом).
  2. Да, вы можете передать любое двойное значение в нем. (Любое число, если на то пошло.)
  3. Нет, обе функции принимают параметр double. Проверьте документы .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...