シミュレーションにエンティティがあり、その初期位置とパスは Java を使用したコード (10 進度) です。センサーの半径 (海里) と速度 (海里/時) を 10 進度に合わせてスケーリングする必要があります。目的は、OpenMap と Google Earth でシムを視覚化することです。
距離(マイル)を度に変換する方法を見てきましたか?、しかしそこの提案は機能しません。
どんな助けでも大歓迎です!大円距離の式を使用する必要があると思いますが、うまくいきません。
シミュレーションにエンティティがあり、その初期位置とパスは Java を使用したコード (10 進度) です。センサーの半径 (海里) と速度 (海里/時) を 10 進度に合わせてスケーリングする必要があります。目的は、OpenMap と Google Earth でシムを視覚化することです。
距離(マイル)を度に変換する方法を見てきましたか?、しかしそこの提案は機能しません。
どんな助けでも大歓迎です!大円距離の式を使用する必要があると思いますが、うまくいきません。
EdWilliamsのAviationFormulahttps ://edwilliams.org/avform.htmは、開始するのに適した、アクセスしやすい場所です。そして、私はよくhttp://movable-type.co.uk/scripts/latlong.htmlを参照します。
ある種のベクトルが必要だと思います(あなたの質問は少し不明確です)。
私が(JavaではなくCで)fix-radial-distanceを計算するために使用するのは次のとおりです。
void polarToLatLong(double lat, double lon, double dist, double radial,
double *outlat, double *outlon) {
if (!dist) { // distance zero, so just return the point
*outlat = lat;
*outlon = lon;
}
else if (lat > 89.9999) { // North Pole singularity. Dist is in NM.
*outlat = 90 - dist / 60;
*outlon = fmod(radial + 180) - 180;
}
else { // normal case
double sinlat, coslon;
dist /= 3442; // = Earth's radius in nm (not WGS84!)
sinlat = Sin(lat) * cos(dist) + Cos(lat) * sin(dist) * Cos(radial);
*outlat = Arcsin(sinlat);
coslon = (cos(dist) - Sin(lat) * sinlat) / (Cos(lat) * Cos(*outlat));
*outlon = lon + (Sin(radial) >= 0 : -1 : 1) * Arccos(coslon);
}
}
上記のコードSin()
では、大文字のSをsin()
使用して、度のラッパーにすぎません。
#define CLAMP(a,x,b) MIN(MAX(a, x), b) // GTK+ GLib version slightly different
double Sin(double deg) {return sin(deg * (PI / 180));} // wrappers for degrees
double Cos(double deg) {return cos(deg * (PI / 180));}
double Arcsin(double x) {return asin(CLAMP(-1, x, 1)) * (180 / PI);}
double Arccos(double x) {return acos(CLAMP(-1, x, 1)) * (180 / PI);}