2012-01-18 10 views
1

私は北から地点への方位を計算するためにJavaのクラスをプログラムすることができます。既知の唯一の物体は2つの位置であり、どちらも北からの方位と0からの距離を持っています。したがって、たとえば位置1-30度と10m、位置2- 190度と50mです。あなたがポジション1からポジション2へ、またはポジション2からポジション1へ移動したい場合、どのようにベアリングを計算しますか?私はコサインルールを使って2つの位置の間の距離を計算できますが、さまざまなシナリオでベアリングを正確に計算するクラスをどのように作成するのか分かりません。Java - Trigonometry Hell

何か助けや助言をいただければ幸いです。

+0

http://www.movable-type.co.uk/scripts/latlong.html –

+0

この宿題ですか? –

+0

私は緯度と経度のポイントがなく、最初の方位と距離のみです。 –

答えて

2

enter image description here

...あなたはすべての3つの辺の長さを持っていたら、これはあなたの三角形の第3の角度を与えます。

(半正矢式は球のナビゲーションのためです...私たちは平面上のベクトルについてだけ心配していると思います。)

+0

ああ、彼は "北"という言葉を使っているので球体を取った。彼の例で使用する距離を見ると、おそらく正しいでしょう。 –

+0

あなたのウィキペディアブラックアウトハックはどうなりましたか? ... Chromeでは、ページが読み込まれている間にESCを押して、sopaOverlayを停止することもできます。 –

+0

ブラックアウトされました!ハハ、私は答えに残すことが文脈から外れていると感じました。それは$( "#mw-sopaOverlay")でした。 $( "div")。show(); –

0

これは、ここで指定したJavaScriptのソリューションから移植されたJavaのバージョンである: Using the Haversine Formula in Javascriptによってtalkol

// this was a pojo class we used internally... 
public class GisPostalCode { 

    private String country; 
    private String postalCode; 
    private double latitude; 
    private double longitude; 

    // getters/setters, etc. 
} 


public static double distanceBetweenCoordinatesInMiles2(GisPostalCode c1, GisPostalCode c2) { 

    double lat2 = c2.getLatitude(); 
    double lon2 = c2.getLongitude(); 
    double lat1 = c1.getLatitude(); 
    double lon1 = c1.getLongitude(); 

    double R = 6371; // km 
    double x1 = lat2 - lat1; 
    double dLat = x1 * Math.PI/180; 
    double x2 = lon2 - lon1; 
    double dLon = x2 * Math.PI/180; 

    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1*Math.PI/180) * Math.cos(lat2*Math.PI/180) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    double d = R * c; 

    // convert to miles 
    return d/1.60934; 
} 
関連する問題