0

dest()以下の関数を使用して、地球上の目的地の距離を計算しようとしています。ただし、私の関数は、始点(61.488580, 23.784896 )からわずか0.018km離れた目的地を出力します(61.488414, 23.784976)。正解はです(61.49806, 23.765)

誰かが私が間違ったことを理解するのを手伝ってくれませんか?

地球上の目的地を計算する方法のソース

lat2 = asin( sin(lat1)*cos(d/R) + cos(lat1)*sin(d/R)*cos(br) ) 
lon2 = lon1 + atan2( sin(θ)*sin(d/R)*cos(lat1), cos(d/R)−sin(lat1)*sin(lat2) )

これが私の出発点です:

lat1= 61.488414 (degree) 
lon1= 23.784976 (degree)  
br= 315 (degree)  
d= 1.5 (km)  
R= 6371 (km)  
lat2= ? (degree)  
lon2= ? (degree)

これが私の次の関数の実装です:

void dest(){
    double lat1, lon1, lat2, lon2, x, y, R, d, br;
    double lat1rad, lat2rad, lon1rad, dbyRrad, brrad;

    lat1=61.488414;
    lon1=23.784976;
    br=315;
    d=1.5;
    R=6371;

    lat1rad=Math.toRadians(lat1);
    lat2rad=Math.toRadians(lat2); 
    lon1rad=Math.toRadians(lon1); 
    dbyRrad=Math.toRadians(d/R); 
    brrad=Math.toRadians(br);

    lat2 = Math.asin(Math.sin(lat1rad)*Math.cos(dbyRrad)          
      +Math.cos(lat1rad)*Math.sin(dbyRrad)*Math.cos(brrad));
    lat2=Math.toDegrees(lat2);

    y=Math.sin(brrad)*Math.sin(dbyRrad)*Math.cos(lat1rad);
    x=Math.cos(dbyRrad)-Math.sin(lat1rad)*Math.sin(lat2rad);
    lon2 = Math.atan2(y,x);
    lon2 = Math.toDegrees(lon2);
    lon2 = lon1 + lon2;

    System.out.println("lat2 = "+ lat2);   // correct lat2= 61.49806, lon2=23.765
    System.out.println("lon2 = "+ lon2);
}               
4

2 に答える 2

1
lat2rad=Math.toRadians(lat2);

ただし、この時点ではまだlat2を初期化していないため、値0を使用します。その後、lat2を含むいくつかの計算を実行します。

lat2 = Math.asin(Math.sin(lat1rad)*Math.cos(dbyRrad)          
  +Math.cos(lat1rad)*Math.sin(dbyRrad)*Math.cos(brrad));
lat2=Math.toDegrees(lat2);

ただし、この値をlat2radにマップし直すことはありません。次に、lat2rad(まだ0)を使用してxを計算します。

x=Math.cos(dbyRrad)-Math.sin(lat1rad)*Math.sin(lat2rad);

おそらく、コードの2番目のブロックは代わりに次のようになります。

lat2rad = Math.asin(Math.sin(lat1rad)*Math.cos(dbyRrad)          
  +Math.cos(lat1rad)*Math.sin(dbyRrad)*Math.cos(brrad));
lat2=Math.toDegrees(lat2rad);
于 2012-04-04T14:36:16.717 に答える
0

d / Rはすでにラジアンになっていると思いますので、再度変換する必要はありません。

于 2012-04-04T14:32:26.993 に答える