10

分点と至点を計算するために利用できるアルゴリズムまたは式は何ですか? 数年前にこれらの 1 つを見つけて実装しましたが、精度は高くありませんでした。時刻は、分点に応じて 00:00、06:00、12:00、および 18:00 UTC であると想定されているようです。または至点が計算されました。ウィキペディアはこれらを分単位で計算して提供しているので、より正確なことが可能でなければなりません。私のお気に入りのプログラミング言語のライブラリもハードコーディングされた時代に出てくるので、私が実装したものと同じまたは類似のアルゴリズムを使用していると思います。

また、太陽経度を提供するライブラリを使用して、0、90、180、および 270 度の正確な瞬間に照準を合わせるための検索ルーチンを実装したこともあります。これは秒まで機能しましたが、ウィキペディアの時間と一致しなかったため、このアプローチには何か問題があったと思います。しかし、マイモニデス (中世のユダヤ人学者) が 1,000 年前にまったく同じアイデアを使用したアルゴリズムを提案したことを知って、私はうれしい驚きを覚えました。

4

4 に答える 4

3

(複雑な!) 基礎となる数式とアルゴリズムの優れたソースは、Jean Meeus によるAstronomical Algorithmsです。

これらのアルゴリズムのPyMeeus実装と以下のコードを使用すると、2018 年の冬至 (「冬」は北半球を指す) の次の値を取得できます。

winter solstice for 2018 in Terrestrial Time is at:
 (2018, 12, 21, 22, 23, 52.493725419044495)

winter solstice for 2018 in UTC, if last leap second was (2016, 12):
 (2018, 12, 21, 22, 22, 43.30972542127711)

winter solstice for 2018 in local time, if last leap second was (2016, 12)
 and local time offset is -7.00 hours:
 (2018, 12, 21, 15, 22, 43.30973883232218)

i.e. 2018-12-21T15:22:43.309725-07:00

もちろん、答えはマイクロ秒まで正確ではありませんが、arrow.

コード:

from pymeeus.Sun import Sun
from pymeeus.Epoch import Epoch

year = 2018  # datetime.datetime.now().year
target="winter"

# Get terrestrial time of given solstice for given year
solstice_epoch = Sun.get_equinox_solstice(year, target=target)

print("%s solstice for %d in Terrestrial Time is at:\n %s" %
      (target, year, solstice_epoch.get_full_date()))

print("%s solstice for %d in UTC, if last leap second was %s:\n %s" %
 (target, year, Epoch.get_last_leap_second()[:2], solstice_epoch.get_full_date(utc=True)))

solstice_local = (solstice_epoch + Epoch.utc2local()/(24*60*60))
print("%s solstice for %d in local time, if last leap second was %s\n"
 " and local time offset is %.2f hours:\n %s" %
 (target, year, Epoch.get_last_leap_second()[:2],
  Epoch.utc2local() / 3600., solstice_local.get_full_date(utc=True)))

非常にクールな ISO および TZ 対応モジュールArrow: better date and times for Pythonを使用すると、より適切に印刷できます。

import arrow
import math

slutc = solstice_epoch.get_full_date(utc=True)
frac, whole = math.modf(slutc[5])

print("i.e. %s" % arrow.get(*slutc[:5], int(whole), round(frac * 1e6)).to('local'))
于 2018-12-22T22:47:39.573 に答える
1

これがあなたにとって十分に正確な解決策であるかどうかはわかりませんが、春分点を計算するためのコードスニペットやその他の天文学的な情報を含むNASA の Web サイトを見つけました。Astronomical Algorithmsという本への参照もいくつか見つけました。情報が何らかの形でオンラインで入手できない場合に必要な答えが得られる可能性があります。

于 2009-04-01T05:01:39.967 に答える
1

ここで回答に貼り付ける何かを探していることは知っていますが、NASA が資金を提供している JPL の NAIF によって作成されたツールキットであるSPICEについて言及する必要があります。Farmer's Almanac のものにはやり過ぎかもしれませんが、精度への関心についておっしゃいましたが、このツールキットは惑星科学で日常的に使用されています。

于 2009-04-01T05:14:40.997 に答える
-2

興味があれば、Jean Meeus(上記の天文アルゴリズムの作者)の分点と至点のアルゴリズムをCとJavaで実装しました。

于 2009-05-28T17:29:19.077 に答える