2010-11-18 8 views
1

(www.movable-type.co.uk/scripts/latlong.html)の式を使用して、開始点を返す目的地を返そうとしています点、距離、方位などがあります。これらは私の値は以下のとおりです。私はD、st_latやウェブサイトでベアリングを入力するとvincentyの式を使用するときに間違った計算が行われ続ける

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); 

は、私はこれを取得:39°33'28 "Nを。 上記のコード(私がウェブサイトからコピーしたもの)を使用すると、私はこれを得る:39.25679699255662。

私は周りより多くのを見て、誰かが分裂は小数点量を返さないかもしれないと述べたので、私は分裂を置き換え:私は答えを

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

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

とに数式を変更今すぐ取得するのは39.25680143864117です。 私は何かが欠落していると確信していますが、計算の各ステップを進んで私がどこにいるのか見ることができません。誰にどのようにこれを行うにはステップバイステップの指示がありますか?私は大いに感謝します。おかげさまで

+0

なぜ半径は整数ですか? –

+1

trig関数を使用すると、距離があまり正確ではありません –

+0

あなたはそれが何を示唆していますか? – Dave

答えて

0

分数/秒から小数点まで正確に変換していますか?

度で60分、分で60秒です。開始緯度が39.4450の場合正とは赤道の北を意味します。 106.1607のベアリングが北方向から時計回りに測定されると仮定した場合、あなたが南東に旅行していることを意味します。

あなたは答えが39°33'28 "Nであると言っていますが、これを小数点に変換すると、39+(33 + 28/60)/ 60 = 39.5578になります。この結果はあなたの出発点よりも大きいです。つまり、あなたは南東を移動していますが、あなたのポイントの北には終わります。

私はあなたのコードの数学をまだ見ていませんが、あなたの問題は分/秒から小数点以下に変換することにあります。

+0

元のポスターが分/秒に変換されていないことを考えれば、彼が参照として使用しているウェブサイトが間違っているということを示唆していますか?私は自分自身でそのウェブサイトを読み込むことができないので、実際に何をしているのかを確認することはできません。 – Chris

+0

ウェブサイトが分/秒単位で入力していると思われ、小数点以下の文字を入力しています... 39°44'50 " N、39°の代わりに26'42 "N – aepryus

+0

ああ、私はあなたが意味するものを参照してください。間違いなく可能です。私はそれがウェブサイトのようなものであれば、整数への入力を切り捨てたり、そのようなものをベアグランと距離に切り捨てるかどうか、自分自身を疑問に思いました。 – Chris

関連する問題