формула закона косинуса - PullRequest
3 голосов
/ 12 июня 2011

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

# 'lat' short for 'latitude', 'lng' short for 'longitude'.
# EARTH_RADIUS = 6371000.0, unit is meter.
#
distance = Math.acos( Math.sin(lat1)*Math.sin(lat2) + 
           Math.cos(lat1)*Math.cos(lat2) * 
           Math.cos(lng2-lng1)) * EARTH_RADIUS

Если широта двух точек равна (lat1 == lat2), я могу вычислить lng2 из lng1 с расстоянием.Поэтому я рассуждаю по формуле сферического закона косинусов формула

# lat1 == lat2 == lat
# 'distance' and 'lng' are known 
lng2 = Math.acos((Math.cos(distance/EARTH_RADIUS) - Math.sin(lat)*Math.sin(lat))/(Math.cos(lat)*Math.cos(lat))) + lng

Эта формула работает очень хорошо, за исключением некоторых ситуаций.1015 * Это приведет к ошибке

Math::DomainError: Numerical argument is out of domain - "acos"

Поскольку значение в Math.acos (value) равно -2.5100189069914602, которое меньше -1.Я понятия не имею об этом.Является ли производное неверным?

Ответы [ 2 ]

4 голосов
/ 12 июня 2011

В вашей формуле нет ничего плохого.Я не делал расчеты, но я предполагаю, что дело в том, что вы (очень !!) близки к южному полюсу, и в принципе нет двух точек, которые находятся на таком большом расстоянии.

0 голосов
/ 10 декабря 2015

просто добавьте сравнение перед ним:

if lat1 == lat2 and lng1 == lng2
  return 0
end
...