NASA NAIF が公開している SPICE では、惑星の定数を取得することができます。たとえば地球の半径を取りたい場合は、以下のコードで取得することができます。
#include <stdio.h>
#include "SpiceUsr.h"
int main()
{
SpiceBoolean found;
SpiceInt nr;
SpiceDouble radii[3];
SpiceInt code;
SpiceChar name[] = "Io";
bodn2c_c(name, &code, &found);
printf("Found %s code? %s", name, found ? "Yes" : "No\n");
if (found) {
printf(" => %d\n", code);
/* load PCK files */
furnsh_c("pck00010.tpc");
found = bodfnd_c(code, "RADII");
printf("Found %s radii? %s", name, found ? "Yes" : "No\n");
if (found) {
bodvcd_c(code, "RADII", 3, &nr, radii);
printf(" => %8.3f %8.3f %8.3f\n",
radii[0], radii[1], radii[2]);
}
}
return 0;
}
これを実行すると、以下のように出力されます。
Found Earth code? Yes => 399
Found Earth radii? Yes => 6378.137 6378.137 6356.752
地球の半径が、 約 6378 Km なことがわかります。
SPICE の中で、地球は ID 399
が割り当てられています。
地球は球体なのに半径の値が 3つ戻ってくる理由は、地球は実は赤道半径の方が極半径よりも長い 「扁球」だからです。
3つの数値は、左から順番に
- 赤道半径 (最長部)
- 赤道半径 (最短部)
- 極半径
と、なっています。 地球や他の大きな惑星の場合赤道半径は同じですが、例えば木星の第一衛星であるイオでは、赤道半径に差が出ます。イオ ("Io"
)の ID は、 501
です。
Found Io code? Yes => 501
Found Io radii? Yes => 1829.400 1819.400 1815.700
イオの場合は、長軸を木星に向けた楕円体のようです。