ベストアンサー:
2011年6月に、海軍天文台が、最高精度の天文計算を実行する強力なNOVAS参照ソフトウェアへのPythonインターフェイスをリリースしたことに気づきました。
http://aa.usno.navy.mil/software/novas/novas_py/novaspy_intro.php
このライブラリを使用すると、PyEphemがこれまでに提供したよりもはるかに高い精度で、探している答えを得ることができます。
from novas import compat as novas
jd_tt = novas.julian_date(2012, 9, 8, 12.00)
delta_t = 66.603 # from http://maia.usno.navy.mil/ser7/deltat.preds
lat = 42.3583 # positive is north
lon = -71.0603 # negative is west
observer = novas.make_observer_on_surface(lat, lon, 0, 0, 0)
print novas.geo_posvel(jd_tt, delta_t, observer)
私のマシンでは、これが答えを与えます:
((-3.5081406460494928e-06、3.135277713623258e-05、2.858239912567112e-05)、(-0.00019753847060164693、-2.2329942271278055e-05、2.4885824275734915e-07))
自分で試してみて、これで必要な結果が得られるかどうかを確認してください。
新しい答え:
答えは「いいえ」のようです—驚いたことに、PyEphemは、「x、y、z座標で、時間tのボストンはどこにあるのか」という質問に対する答えを簡単に得る方法を提供していません。</ p>
もちろん、PyEphemの背後にあるライブラリである「libastro」は、他のオブジェクトがオブザーバーに対してどこにあるかを把握するために、これを内部で計算する必要があるため、これは驚きです。それは2つの場所でそうしているようです。その中で、外側の角度についてのみ話すparallax.c
ものを定義しますが、その内側では、オブザーバーのx、y、zを一時的に計算していることがわかります。完全な球体ではないため、地球がどれだけ平らであるかを測定する、その中に隠された重要な定数を見ることができます。ta_par()
298.257
もう1つの場所は、earthsat.c
他の「libastro」とは完全に異なるコードベースのように見えるため、ロジックの一部が重複しています。の定数EarthFlat
は298.25
少し精度が低くなりますが、同じ仕事をしています。そして、その関数、はGetSitPosition()
、実際にはx、y、z座標を非表示にするのではなく、公開します。ただし、宣言されstatic
ているため、この便利な関数を外部から呼び出す方法はありません。
したがって、現時点では、PyEphemはx、y、zを直接計算する方法を提供していません。しかし、それは1つの重要な情報を提供します。現在の恒星時です。これを使用して、ボストン(またはどこでも)が時間の経過とともに地球をどれだけ移動したかを把握できます。これt
は、把握する上で重要です。あなたの座標。
PyEphemからの時角といくつかの明示的な三角法を組み合わせて答えを得るPythonの簡単なソリューションを作成できるかどうかを確認します。しかし、今のところ、いいえ。PyEphemは、残念ながら、この情報を直接公開していません。将来のバージョンのためにリストに載せます!
質問が月のx、y、z位置についてだったときからの古い答え:
PyEphemには、残念ながら、アマチュア天文学で使用される極座標からx / y / z座標に変換するための組み込み関数がありません。これにより、オブジェクトが地球の周りの空間にどのように分布しているかをマップできます。しかし、変換は自分で行うのは簡単です。
import ephem
import math
m = ephem.Mars('2012/8/1')
print m.ra, m.dec
x = math.cos(m.dec) * math.cos(m.ra)
y = math.cos(m.dec) * math.sin(m.ra)
z = math.sin(m.dec)
print x, y, z
print 'sanity check: vector length =', math.sqrt(x*x + y*y + z*z)
このスクリプトの出力は次のとおりです。
12:58:51.20 -6:24:05.6
-0.961178016954 -0.252399543786 -0.111495695074
sanity check: vector length = 1.0
ここで使用したランダムな日付の火星の位置は、かなり妥当な値です。大円の半分よりほぼ1時間長いRA(12時間はちょうど半分になるため)、および位置を少し南に押す赤緯です。 。したがって、、、、x
およびy
私z
たちが得たもの:z
-6°は実際に赤道の南にあるため、はわずかに負の数でありx
、y
24時間の円の周りを13時間進むと、通常の単位円。
J2000には南北がありますが、正直に言うと、わずかに負の値z
は南方向ですが、下を向いている地球は常に東西に全方向に揺れているため、東西はありません。代わりに、RAは、春分の間に太陽が当たる方向である「春分点」から測定します。したがってx
、y
東でも西でもありません。それらは、地球が毎年春に座る方向によって定義される固定軸上で太陽系を指す座標です。
私が作成したこのx
y
z
ベクトルは「単位ベクトル」です。数式が正しいことを確認するためにスクリプトで検証したように、大きさが1.0の小さなベクトルです。地球からの距離がわかっているオブジェクトの計算x
y
と座標を使用している場合は、3つのそれぞれにオブジェクトまでの距離をz
掛けることで、実際のベクトル(大きさは1の分数ではなく、距離)を取得できます。x
y
z
それはあなたを助けますか?あなたの説明から、そして東と西についてのあなたの質問から、RAとdecをx
y
z
変換したいかどうか、または実際に方位角と高度を変換したいかどうかはわかりませんでした(ただし、数学はどちらの方法でも同じです)。これは次のようになります。
x = math.cos(m.alt) * math.cos(m.az)
y = math.cos(m.alt) * math.sin(m.az)
z = math.sin(m.alt)
これらの座標で何を達成しようとしていますか?それは、私たちがそれらを有用な形式であなたに提供していることを確認するのに役立つ可能性があります。