他のポイントの経度からポイントの経度を計算しようとしています。それらは同じ緯度を持ち、それらの間の距離は既知です。私は余弦定理の公式を使用しようとしています。
# '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
2点の緯度が等しい場合(lat1 == lat2)、距離を使用してlng1からlng2を計算できます。だから私は余弦定理の公式からの公式を推論します
# 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
この式は、いくつかの状況を除いて、非常にうまく機能します。
好き
lat_degrees = -89.8345981836319
lng_degrees = 96.42309331893921
lat = lat1 = lat2 = (lat_degrees * Math::PI)/180 # -1.567909520510494
lng = (lng_degrees * Math::PI)/180 # 1.682900453373236
distance = 67544.06725769254
これによりエラーが発生します
Math::DomainError: Numerical argument is out of domain - "acos"
Math.acos(value)の値が-2.5100189069914602に等しいため、-1よりも小さくなります。それについてはわかりません。導出された形式は間違っていますか?