まず初めに、背景となる恒星の配置等には、Hipparcos Catalogのデータを用います。データそのものはu-strasbg.frからダウンロードできます(ファイルの実体はFTPにあるhip_main.dat.gzです)。このファイルを展開すると50MBを超えるサイズになりますが、シミュレーターの起動のたびにこれをダウンロードするのは現実的ではありませんので、必要なデータのみ抜き出し、ついでにJavaScriptで扱いやすいJSON形式にしてしまいましょう。
ヒッパルコスカタログの実体は固定長のテキストファイルとなっており、そのフォーマットはnasa.govで解説されています。各恒星のH5:Vmag(等級)、H8:RA(赤経)、H9:Dec(赤緯)、H11:Parallax(視差)、H37:B-V(色)、あたりがあれば正確性はさておきどうにかプロットできそうです。
恒星の視差をもとに、恒星の太陽からの距離を求めることができます。ヒッパルコスカタログの視差(H11)はミリ秒で記録されているので、これを秒単位にして、逆数をとるとパーセク単位での距離が求まります。すなわち、恒星までの距離は\(距離[\mathrm{parsec}] = 1 / (視差[\mathrm{msec}] / 1000)\)で概算できるということになりますが、一部の恒星は視差が0となっているのでゼロ除算に気をつける必要があります。
色の算出は少々面倒です。一応B-Vという色に関するインデックスが与えられていますが、本来はB-V値から一律にRGB値を求めることはできません。というのも、色というのは、距離や周辺の雰囲気によって変わってくるためです。しかし、そうはいってもプログラミングする上で星の色の目安が必要ですから、ここはえいやっと計算してしまいましょう。Sekiguchi and Fukugita (2000)[1] 中の(2)式から
によりB-V値から有効温度(\(T_{eff}\)、すなわち黒体と見なしたときの温度)を推定することができます。この有効温度を用いて、Planckian Locusの近似式からCIE1931における色度座標(x,y)を求めます。その上で、簡単のため明度Y=1.0と見なし、Stokes et al. (1996)[3] のxyY→sRGB変換の式によりRGBの値を出すことができます。本来は、距離が遠くなる(=エネルギーフラックスが低くなる=明度が低くなる)に従ってRGBの値を暗くする必要がありますがこの逓減は観測者と恒星の距離に依存するため、ここではY<1.0の場合は考えず、JavaScript側でα値等を変更することによって対応することにします。 こうして約11万個の恒星について、座標(赤経・赤緯)、等級、色のみ抜き出してJSON化したものがこちらで、これを使って赤道座標系で投影したものがこちらです。まぁなんとなく天の川銀河の円盤が見えるような気がしませんか。

参考までに、このJSONデータを作成するPerlスクリプトも掲載しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
#!/usr/bin/perl use strict; my $filename = "hip_main.dat"; my $cnt = 0; my ($c0, $c1, $c2, $c3) = (3.939654, -0.395361, 0.2082113, -0.0604097); open(FILE, $filename) || die $!; print "["; while (my $line = <FILE>) { chomp $line; parseLine($line, $cnt++); } print "]"; close(FILE); sub parseLine { my $line = shift; my $count = shift; my @h = split(/\s*\|\s*/, $line); my $id = $h[1]; my $Vmag = $h[5]; my $RA = $h[8]; my $Dec = $h[9]; my $Parallax = $h[11]; my $BV = $h[37]; if ($RA == "") { warn "Warning: RA is missing. This record will be skipped."; return 1; } if ($BV == "") { warn "Warning: B-V is missing, which is assumed to be 0."; } my $dist = plx2pc($Parallax); my $color = bv2rgb($BV); if ($count > 0) { print ","; } printf '{"ID":%d,"RA":%f,"Dec":%f,"Vmag":%0.2f,"dist":%f,"color":"%s"}', $id, $RA, $Dec, $Vmag, $dist, $color; } sub plx2pc { my $plx = shift; return ($plx == 0) ? 0 : (1000 / $plx); } sub bv2rgb { my $bv = shift; # Sekiguchi & Fukugita (2000) my $logT = $c0 + $c1*$bv + $c2*$bv*$bv + $c3*$bv*$bv*$bv; my $T = 10**$logT; # Planckian locus my ($x, $y); if ($T < 4000) { $x = -0.2661239e9 / ($T*$T*$T) - 0.2343580e6 / ($T*$T) + 0.8776956e3 / $T + 0.179910; } else { $x = -3.0258469e9 / ($T*$T*$T) + 2.1070379e6 / ($T*$T) + 0.2226347e3 / $T + 0.240390; } if ($T < 2222) { $y = -1.1063814 * $x*$x*$x - 1.34811020 * $x*$x + 2.18555832 * $x - 0.20219683; } elsif ($T < 4000) { $y = -0.9549476 * $x*$x*$x - 1.37418593 * $x*$x + 2.09137015 * $x - 0.16748867; } else { $y = 3.0817580 * $x*$x*$x - 5.87338670 * $x*$x + 3.75112997 * $x - 0.37001483; } my $Y = 1.0; my $X = $Y * $x / $y; my $Z = $Y * (1.0 - $x - $y) / $y; my $R = srgb( 3.2406 * $X - 1.5372 * $Y - 0.4986 * $Z); my $G = srgb(-0.9689 * $X + 1.8758 * $Y + 0.0415 * $Z); my $B = srgb( 0.0557 * $X - 0.2040 * $Y + 1.0570 * $Z); my $r = int(($R < 0 ? 0 : ($R > 1 ? 1 : $R)) * 255); my $g = int(($G < 0 ? 0 : ($G > 1 ? 1 : $G)) * 255); my $b = int(($B < 0 ? 0 : ($B > 1 ? 1 : $B)) * 255); return sprintf("0x%02x%02x%02x", $r, $g, $b); } sub srgb { my $c = shift; return ($c <= 0.0031308) ? 12.92 * $c : ((1 + 0.055) * $c**(1/2.4) - 0.055); } |
なお、Three.jsによる恒星のモデリングについては、別途ご紹介します。
(続く)
- Sekiguchi, M., & Fukugita, M. (2000). A study of the B-V color-temperature relation. The Astronomical Journal, 120. pp. 1072-1084. Retrieved from http://iopscience.iop.org/1538-3881/120/2/1072/pdf/1538-3881_120_2_1072.pdf.^
- ただしc0 = 3.939654, c1 = -0.395361, c2 = 0.2082113, c3 = -0.0604097 で、f([Fe/H])は無視。^
- Stokes, M., Anderson, M., Chandrasekar, S., & Motta, R. (1996). A standard default color space for the Internet – sRGB. Retrieved from http://www.w3.org/Graphics/Color/sRGB.html^
Login