23

日の出と日の入りの時刻を記録するのが好きです。過去 2 年間、私はこれを、お気に入りのプログラミング言語の一般的なライブラリで作成された小さなプログラムで行ってきました。この 2 か月間、いつもより定期的にこれらの時刻を追跡してきましたが、分点の日に日の出時刻が前日に比べて 8 分急上昇したことに偶然気付きました! 私はこれが不可能であることを知っており、NOAAと比較すると、私の上昇時間と設定時間は数日間ずれていて、実際には 1 年のほとんどで約 1 分ずれているように見えました。

この時点で、自分で計算を実装したいと思います。この計算を行うために利用できるアルゴリズムまたは式は何ですか?

4

8 に答える 8

10

ウィキペディアの日の出方程式に関する記事を読むことを検討してください。先頭のパラグラフは次の式を示しています。

どこ:

  • ω oは、日の出 (負の値をとった場合) または日の入り (正の値をとった場合) の時角(°) です。
  • φ は地球上の観測者の緯度 (度)
  • δ は太陽の赤緯(度)
于 2009-04-01T04:52:21.797 に答える
7

NOAA に一致させたい場合は、Jean Meeus のAstronomical Algorithms (主に第 15 章) を参照する必要があります。しかも複雑!Martin Beckett の言うとおりです。日没を定義する必要があります。通常、これは太陽の上肢の見かけの上昇またはセットであり、「標準」高度を -5/6 度 (ゼロではない) にします。また、NOAA の精度で日の出や日の入りを直接計算することはできません。問題の日の見かけの赤経と赤緯の支配的な一連の方程式を作成し、時間の経過に伴う見かけの赤経と赤緯を補間して、標準高度での正確な上昇時間と沈降時間を見つける必要があります。

お役に立てれば。私は約 1 か月かけてAAを消化し、同じ問題に遭遇したときにすべてのソーラー コードを書き直しましたが、コードが壊れたコーナー ケースのいくつかを整理するのにさらに 1 年以上かかりました。そのため、わかるまでに時間がかかります。私はこのアルゴリズムの公開コード例を認識しておらず、現時点で共有できるものもありませんが、できればいくつかの頭痛の種を解決して喜んでお手伝いします.

于 2011-03-08T22:00:52.980 に答える
4

日の出/日の入りを構成するものの定義はさまざまです。たとえば、ephem「立ち上がりと設定は、上肢が地平線に触れた瞬間(つまり、体の高度と半径がゼロに等しい瞬間)として定義されます)[PyEphemクイックリファレンス]

#!/usr/bin/env python
import datetime
import ephem # to install, run `pip install pyephem`

o = ephem.Observer()
o.lat, o.long, o.date = '34:3', '-118:15', datetime.datetime.utcnow()
sun = ephem.Sun(o)
print "Los Angeles"
print "sunrise:", o.next_rising(sun), "UTC"
print "sunset:",o.next_setting(sun), "UTC"

出力

Los Angeles, CA
sunrise: 2010/3/30 13:42:43 UTC
sunset: 2010/3/30 02:11:50 UTC

オープンソースライブラリの場合は、新しいバグで新しいライブラリを作成する代わりに、修正することができます。

于 2010-03-29T21:34:22.043 に答える
4

5 分の範囲の精度を得るには、「どの」日の入りを考慮する必要があります。
太陽の底が地平線に触れる時間と、太陽の頂上が地平線の下を通過する時間のどちらが必要ですか?

太陽が地平線を横切るのに2分かかります。
1min レベル以下では、大気の屈折も考慮する必要があります。

于 2009-06-01T18:48:34.937 に答える
3

Peter Duffett-Smith著
の「Practical Astronomy with your Calculator (Paperback)」という本をご覧ください。
かなり古いですが、まだ印刷されています... リンク

于 2009-06-01T18:36:39.063 に答える
2

Ruby では、均時差のためにこれを書きました。

include Math

# degrees to radians = PI/180
to_r = PI/180.0

#radians to degrees = 180/PI
to_d = 180.0/PI

puts "Day, Declination, EofT"

# test a celestial year worth of values.
for jday in 1..366

  et = -7.633 * sin(jday * (2 * PI)/365.24) + 9.65 * sin((jday - 78) * 180/92 * to_r)
  a_sin = sin(23.433 * to_r) * sin((2 * PI/366) * (jday - 81))
  declination = asin(a_sin) * to_d
  puts "#{jday}, #{declination}, #{et}"

end

次に、上記の式について:

# center disk and refraction factor have been considered.
cos_omega = sin(-0.83 * to_r) - tan(latitude * to_r) * tan(declination * to_r)
semi_diurnal_arc = acos(cos_omega)

http://www.analemma.com/に、これ専用の Web サイト全体があります。

  • これらの計算の鍵は、上記の python 用のライブラリのような優れたライブラリです。
  • また、Date および Time クラスの使用。私はエフェムのようなものをルビフォージで探します。
于 2011-02-23T19:25:38.123 に答える
0

この NOAA ページの Technical Definitions and Computational Details の見出しの下にいくつか興味深いものを見ましたが、すでに読んでいると思います。

SOの質問「指定された時刻と緯度/経度の太陽の位置」と上記に対する答えは、実際に必要なすべてかもしれません。

補足として(質問に直接答えることはありません)、NOAAデータを取得して計算する代わりにルックアップテーブルとして使用できない理由はありますか?最近のストレージは比較的安価になる傾向があります。

于 2009-04-01T04:50:18.060 に答える
0

太陽の位置の計算に関する以前のエントリを参照することをお勧めします。 具体的には、私が指摘したSolposプログラムは日の出/日の入りをサポートしています。

于 2009-04-01T04:55:48.903 に答える