古代マヤのカレンダー-日付の計算方法は?

読者の皆さん、こんにちは!



ご存知のように、ごく最近では、古代マヤの暦がみんなの耳にありました。 かつて偉大な文明の計算の終わりの燃える問題に注意を払った人はほとんどいません。 今、私は質問の数学的本質-マヤ暦の日付を計算する方法を掘り下げることを提案します。



私の話では、通常のグレゴリオ暦の日付からマヤ暦の日付を取得する方法を示し、Pythonのアルゴリズムの例を示します。



最初に、カレンダー自体の理論を簡単に繰り返します。



マヤ暦は、3つの主要部分で構成されています。 これは長い説明です、ツォルキンとハーブ。



カレンダーの4番目のオプション部分は、夜の領主のリストです。 そのうちの9つだけがあり、それらは互いに続きます。 9日間の週のようなもの。 マスターの名前は保存されていないため、G1、G2、G3、G4、G5、G6、G7、G8、G9のように単純に指定するのが一般的です。



他に何を知っておくべきですか? グレゴリオ暦を何日から数えるかは定かではありません。 この主題については多くの権威ある意見がありますが、現在では2つのバージョンが人気があります。いわゆる相関584283と584285です。 2012年12月21日はGMT相関のカレンダーの終わりですが、最近では2番目の相関がより真実であるという意見がますます支持されています。 彼女によると、「すべてのことの終わり」は2日後-2012年12月23日です。 ほら、仲間! もちろん、これは私たちにとってはるかに簡単です。



だから...マヤ時代の初めからの日数を知っているすべてのカレンダー値を計算することができます。 ユリウス時代と同様、arbitrarily意的に「マヤン時代」と呼びます。



時代の日付のマヤ日は、式(D + 1721425-C)を1872000で割った余りとして計算されます。ここで、Dは時代の始まりから特定の日付までの日数、Cは相関値、1872000はマヤ時代の日数です。 したがって、Pythonでは、式は次のとおりです。

M = (D + 1721425 – C) % 1872000
      
      





PythonでD値を取得するのは非常に簡単です。datetimeモジュールをインポートし、現在の日付がcurrent_date = datetime.date.today()の場合、D = current_date.toordinal()になります。 または単に-D = datetime.date.today()。Toordinal()



これで、マヤの日の意味がわかったので、他のすべてを計算できます。 長いアカウントから始めましょう。



長いスコアは親族のスコア(1親族= 1日)、20親族は1ビニール、18個の小瓶は1ツンまたは20×18 = 360親族、20ツンは1カツンまたは20×18×20 = 7200親族、20カツン-1バクタンまたは20×18×20×20 = 144,000キン。 時代は13個のバクトゥンで構成されているため、時代は20×18×20×20×13 = 1872000近親族になります。 たとえば、長期的にはマヤ時代の最終日は12.19.19.17.17になります。

したがって、Baktun、Katun、Tuna、Vinal、およびKinaの現在の値を取得するには、まずマヤの日を144000で除算し(Baktunを取得します)、次に残りを7200で除算し(Katunを取得します)、次の残りを360で除算します(Tunを取得します) )、次の残りは再び18(非難)で除算され、最後の残りは私たちに親族を与えます。



Pythonでは、すべてが言葉よりもはるかに簡単です。

 d =  result = [] for i in (144000, 7200, 360, 20, 1): t, d = divmod(d, i) result.append(t)
      
      





ここで、Mは以前に計算されたマヤの日です。



その結果、必要なすべてのロングカウント値を含むリストを取得します。



もう一言。 祖先のカレンダーをまだ使用している古代マヤの人々の生きた代表者を見つけることはできないため、バクトゥンが時代の変化の中で表現するように、それは謎のままです。 時代がゼロbaktunで始まる場合、新しい時代の始まりは数字0.0.0.0.0になることは非常に明白です。 しかし、マヤ人は完全にゼロの日付を避けたと言われているため、新しい時代の始まりを13.0.0.0.0と表現したと思われます。 さらに、新しい時代の翌日がどのように見えるかは明らかではありません-13.0.0.0.1または0.0.0.0.1。 別のアイデアが日付の計算に影響を与えることはありませんので、先に進みましょう。



ツォルキンを飲みましょう。 Tzolkinは2つの部分で構成されています-13日サイクルの日番号と20日サイクルの日名。 それらをT2とT1と呼びましょう(便宜上、純粋に変更する場所では注意を払わないでください)。



だから

 T1 = (M + 19) % 20 T2 = (M + 3) % 13 + 1
      
      





ここで、3と19は定数です。これは、ツォルキンサイクルの始まりがマヤ時代の始まりと一致しなかったことを意味します。

したがって、ツォルキンの時代の名前のタプルを

 t1 = ("Imix'", "Ik'", "Ak'b'al", "K'an", "Chikchan", "Kimi", "Manik'", "Lamat", "Muluk", "Ok", "Chuwen", "Eb'", "B'en", "Ix", "Men", "K'ib'", "Kab'an", "Etz'nab'", "Kawak", "Ajaw")
      
      





それからその日の名前

 T1s = t1[T1]
      
      







今ではターンとハーバです。

彼も、すべてが非常に簡単です。 haaba月の日をH2とし、月H1自体を計算します(計算を簡単にするために交換します)。

ここから

 H1, H2 = divmod((M + 348) % 365, 20)
      
      





ここで、定数348は、ツォルキンの場合のように、ハーブの始まりが時代の始まりと一致しなかったことを意味します。

そして、おなじみのパターンに従って、haabの月の名前のタプルを用意しましょう

 h1 = ("Pop", "Wo", "Sip", "Sotz'", "Tzek", "Xul", "Yaxk'", "Mol", "Ch'en", "Yax", "Sac", "Keh", "Mak", "K'ank'in", "Muwan", "Pax", "K'ayab'", "Kumk'u", "Wayeb'")
      
      





その後、月の名前

 H1s = h1[H1]
      
      







完全を期すため、夜の支配者を計算することは残っています。 それと同じくらい簡単:

 G = (M + 8) % 9 + 1
      
      







実際、これはすべて私のプログラムによって行われ、そのソースコードはhttps://bitbucket.org/mystic-mirage/mayancから入手できます (gitはgit@bitbucket.org取得できます:mystic-mirage / mayanc.git



プログラムが受け入れるコマンドラインオプションは次のとおりです。

-d <グレゴリオ暦の日付>、デフォルトでは現在の日付。

-g <入力日付形式>、デフォルトでは '%Y-%m-%d'-パラメーターはPythonのstrptime()関数で使用可能なすべての修飾子を受け入れますが、年、月、日のみが重要です。

-f <出力日付形式>、デフォルトは「%C、%Z%H」、

可能な指定子:

%b-baktun、

%k-カトゥン、

%t-調整

%w-非難

%i-親族

%z1-ツォルキンの日の名前の数値(20日サイクル)、

%z2-ツォルキンの日数(13日サイクル)、

%z3-ツォルキンの日の名前(20日サイクル)、

%h1-haabaの月の数値、

%h2-ハババの月の日、

%h3-haabaの月、

%l-夜のソブリン番号、

%Lは夜の支配者

%C-ロングアカウント(%b。%K.%T.%W.%Iと同等)、

%Z-tsolkin(%z2%z3と同等)、

%H-haab(%h2%h3に相当);

-c <correlation>-適用された相関を示し、任意の値を取ることができ、定数も指定できます:デフォルトでgmtおよびtl-gmt、つまり584283;

-s <script>-時代の変更期間中にbaktunを解釈するためのオプション。デフォルトでは1

可能な値:

1-13.0.0.0.0、ただし0.0.0.0.1

2-13.0.0.0.0および13.0.0.0.1、

3-0.0.0.0.0および0.0.0.0.1;

--gmt--c gmtと同等;

--tlは-c tlと同等です。

--baktun--f '%b'と同等;

--katun--f '%k'と同等;

--tun--f '%t'と同等;

--winal--f '%w'と同等;

--kinは-f '%i'と同等です。

--tzol1--f '%t1'と同等;

--tzol2--f '%t2'と同等;

--tzol3--f '%t3'と同等;

--haab1--f '%h1'と同等;

--haab2--f '%h2'と同等;

--haab3--f '%h3'と同等;

--lord1--f '%l'と同等;

--lord2--f '%L'と同等;

--long--f '%C'または-f '%b。%k。%t。%w。%i'と同等;

--tzol--f '%Z'または-f '%z2%z3'と同等;

--haab--f '%H'または-f '%h2%h3'と同等;

--bc-元のグレゴリオ暦の日付がBCの時間間隔にあることを示します。つまり、パラメーター-d 3114-08-11 --bcの組み合わせは、元の日付がBC 3114年8月11日であることを意味します。

--no-l10n-ローカライズされた名前を使用しません。



ご注意 --bcキーを追加すると、コードが非常に複雑になりました。特に、特定の形式で日付認識を少し書き直さなければならず(BC 1年が突然うるう年だったため)、マヤ日の計算で補足しました。 しかし、現在はBC 9999年1月1日からの範囲内の任意の日付を入力パラメーターにできます。 e。 -9999年12月31日まで e。



このプログラムは、コマンドラインからだけでなく、インポート用のモジュールとしても使用できます。

 from mayanc import *
      
      







以下の機能が利用可能です。



todaydatetuple()-グレゴリオ暦(年、月、日)に従って現在の日付を含むタプルを返します。他の機能に使用され、単純なユーザーには一般に役に立ちません。

getmayandays(g_tuple = todaydatetuple()、cor = 584283、bc = False)-日付タプル(年、月、日)、相関値、時代フラグ(BC-False、BC-True)を取得し、マヤ日を返します。

getlongcount(m_days、シナリオ= 1)-マヤの日とシナリオのタイプを取り、ロングスコア(baktun、katun、tun、vinil、kin)の値を持つタプルを返します。

gettzolkin(m_days)-マヤの日数を取り、20日および13日のソルキンサイクルの値で構成されるタプルを返します。

gethaab(m_days)-マヤの日を受け入れ、月の値とhaabの日のタプルを返します。

getlord(m_days)-マヤの日数を取り、夜の君主のシリアル番号を返します。



そのようなタプルもあります:

tzolkinlist-tzolkinの20日間のサイクルに従った日の名前が含まれています。

haablist-haabの月の名前が含まれています。

lordlist-夜の領主の名前が含まれていますが、彼らは知られていないので、タプルには表記(G1 — G9)が含まれています。



まだそのような定数があります:

gmt = 584283

tl = 584285



default_cor = gmt

default_fmt = '%C、%Z%H'、これはそのような修飾子のセットと本質的に同等です-'%b。%k。%t。%w。%i、%z2%z3%h2%h3'

default_sce = 1



スクリプトはconkyと統合できます。 実際、このために彼は書かれました。








All Articles