惑星の定数を取得する

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つの数値は、左から順番に

  1. 赤道半径 (最長部)
  2. 赤道半径 (最短部)
  3. 極半径

と、なっています。 地球や他の大きな惑星の場合赤道半径は同じですが、例えば木星の第一衛星であるイオでは、赤道半径に差が出ます。イオ ("Io")の ID は、 501 です。

Found Io code?  Yes => 501
Found Io radii? Yes => 1829.400 1819.400 1815.700

イオの場合は、長軸を木星に向けた楕円体のようです。