3

他のポイントの経度からポイントの経度を計算しようとしています。それらは同じ緯度を持ち、それらの間の距離は既知です。私は余弦定理の公式を使用しようとしています。

# '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よりも小さくなります。それについてはわかりません。導出された形式は間違っていますか?

4

2 に答える 2

4

あなたの公式には何の問題もありません。私は計算をしませんでしたが、ポイントはあなたが(非常に!!)南極に近く、基本的にそのような大きな距離にある2つのポイントはないということだと思います。

于 2011-06-12T18:10:20.297 に答える