アプリ版:「スタンプのみでお礼する」機能のリリースについて

旧暦ForVBというフリーソフト
http://www.vector.co.jp/soft/dl/win95/personal/s …
に月相を求める関数が入っています。
全部コピペすると文字数オーバしちゅのでできませんが、
これを使って月相(Kyureki.QMphase)を小数点3桁まで求めたいのですが、

以下の部分です。
Kyureki.QMphase = Int(Normalization_Angle(Longitude_Moon(t) - LongiTude_Sun(t)) / 360 * 28 + 0.5)
Kyureki.QMphase = Kyureki.QMphase Mod 28
変更部分はKyureki.QMphaseをIntegerからDoubleに変更して、
Kyureki.QMphase = Int(Normalization_Angle(Longitude_Moon(t) - LongiTude_Sun(t)) / 360 * 28 + 0.5)の0.5を0から1未満の時間に変更すれば出来るとおもいましたが、出来ませんでした。どこが足りないのでしょうか????

A 回答 (4件)

他のところは見てないし、理論も調べてませんが。


・ Int関数は、整数にする関数です。
・+0.5して整数にする、というのは、四捨五入をする基本テクニックです。
・おそらく、Int(〜)の式で、 ある新月を基準に何日経過したかが求められるのだと思います。
これは 28 × ?日 + 月齢 になっているので、 28で割って余りを求めます( Mod 28)
Mod は 整数 ÷ 整数の余りでないとできません。

なので、0.5を変えたところで、Int()で整数になってしまうので無意味です。

方法1:
Int()で整数にしていない値を変数に入れる
→それを 整数部と小数部に分ける
→ 整数部 mod 28 で月齢の整数部を求め、上記の小数部を足す

方法2: 3桁限定なら、
()の中(+0.5を除く) を 1000倍すれば、Intで元の小数点3桁が1の位として残る
→ mod 28000 で 0〜27999 にする
→ 1000で割る


※ 精査したわけではないので、3桁まで計算する意味のあるの精度かまではわかりません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
+0.5が四捨五入の基本テクニックだということすら知りませんでした。
方法1の→それを 整数部と小数部に分ける
ですが、ここがわかりません。文字列にしてピリオドの位置と桁数をカウントしてMID関数とLEFT関数で取り出せば良いのでしょうか。基本的な質問ですいません。

お礼日時:2019/11/13 18:40

こんにちは



t0 = Int((Normalization_Angle(Longitude_Moon(t) - LongiTude_Sun(t)) / 360 * 28) * 1000 + 0.5) / 1000
t1 = Int(t0) '日
t2 = Format(t0, "h:mm:ss") '時間

これでいいのでは?
このモジュールはよく覚えています。長く使っていましたから。最初、Jawk辺りで見た覚えがあります。ただ、旧暦を求めるなら、今は、Web APIがあるから、このモジュールは不要ですけれども。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
旧暦ForVB知ってる人で助かります。
3か月以上前から黄経を求める計算して、それからはまってしまい月相の計算までいってしまい、VBAも3か月くらいの経験しかありません。
質問とはそれますが、このモジュールの元々の計算式の出典とかご存じでしたら教えていただけないでしょうか。黄経、月径の摂動など初めて見て、何この計算って感じです。海上保安庁とか出してる値とかまではいかなくてもある程度の誤差の出せる方法と知識を得たいです。よろしくお願いいたします。

お礼日時:2019/11/13 18:48

No.2 です。


今週は、ちょっとこれから忙しいのですが、週末、落ち着いたらまとめます。
VBAやVBで出来る事自体、すごいことだと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます!。
お待ちしております!!

お礼日時:2019/11/14 18:39

お待たせしました。



できるだけの資料は提供します。
この原点は、1994年11月にNifty Serve FFortuneでまとめられたもので、私の収録は2000/12/10になっています。奇跡的に残っています。以下の文の著者の名が出てきませんが、たぶん、高野英明氏のものだと思われます。文章をまとめようと思いましたが、そのままを掲載します。(OCRで文字起こしたのでご返還があるかもしれません)

その時に私が集めた資料は、『暦の科学』(講談社ブルーバックス)、『天文の計算教室』(地人書館)暦と『占いの科学』新潮新書、『理科年表』

//
旧暦.txt 2000/12/10 17:47:53(収録)

http://www. nifty. ne. jp/*
旧暦の作り方⑴
※この文書はffortuneに94年11月に掲載したものに一部加筆修正したものです
それでは旧暦がどのような仕組でつくられているか簡単に解説しましょう。
とは言っても、旧暦の作り方はその過程において色々なバリエーションが 生じる箇所が存在します。
1. 日本の暦について
日本では正式な暦としては現在は西洋から導入されたグレゴリウス暦が 使用されており、「正式な旧暦」というのは現在存在しないのですが、 毎年あちこちから発売されているいわゆる運勢暦は、昔の旧暦の計算法 を準用して作られているものです。その時の計算の仕方が発行元により 微妙に違っている場合があるので(間違っている場合もある)、大安• 仏滅などといった六曜が暦によって違うような場合もあります。
歴史的なことを言えば、現在出回っている「旧暦」のベースは天保13年 (1842)に定められ、翌々年弘化元年1月1日から明治5 (1872)年12月2日 まで使用されたいわゆる「天保暦」です。この暦の作り方の基本原則は
○新月(朔)になった瞬間が属している日を月初日とする。
〇すると1月が2 9日又は30日になり、月の名前が季節とずれてしまう ので、ときどき閏月を挿入する。閏月は中気の無い月を当てる。
ということです。実はもうーつ重要な原則があるのですが、その前に今 出てきた言葉「中気」を説明するために二十四節気の話をしましょう。
旧暦の作り方⑵
2. 二十四節気について
暦というもののはそもそも何でしょうか?それは人類が季節を知り、 自然のリズムを把握するために時間につけた目盛です。
農業を行なう人は季節の移り変わりに沿って田植や稲刈りなどの作業を しなければいけません。農作物は自然の中で生きていますから、人間側の 都合に合わせてはくれません。また同じように漁業を行なう人は潮の 満ち引きを敏感に把握して作業をしなければなりません。
ここで季節の移り変わりは太陽の運行に支配されています。また潮の 満ち引きは月に支配されています。この2つの天体の運行が暦というもの のベースになったことは決して恣意的なものではなく、人類が生きていく ために必須の要素でした。
日本は古くから農業をベースにして来た国です。ですから月の運行をベース にした「旧暦」の他に、太陽の運行を把握するための、もうひとつの暦を 持っていました。それが二十四節気•七十二候です。
二十四節気という言葉を知らない人でも「立春」とか「夏至」とカ、いう 言葉はご存じでしょう。これは太陽の黄経が0度,15度,30度,45度,....に
なった瞬間のことです。黄道の1周360度を15度ずつに分割すれば360÷15=24 で、2 4の節気ができます。この名前をあげると
-
0° 春分  90°夏至 180°秋分 270°冬至
15°清明* 105°小暑* 195°寒露* 285°小寒*
30°穀雨  120°大暑 210°霜降 300°大寒
45°立夏* 135°立秋* 225°立冬* 315  立春*
60°小満  150°処暑 240°小雪 330°雨水
75°芒種* 165°白露* 255°大雪* 345°啓蟄*

となります。7 2候はこれを更に3分割したものですが、ここでは省略します。
ところで二十四節気には「節」と「中」があります。上記の表の中で
・を付けたものが「節」で、付いていないものが「中」です。
この二十四節気をベースにして作られるのが「節月」です。これは
立春を1月の節、啓蟄を2月の節、清明を3月の節、立夏を4月の節、
芒種を5月の節、小暑を6月の節、立秋を7月の節、白露を8月の節、
寒露を9月の節、立冬を10月の節、大雪を11月の節、小寒を12月の節、 として、ここからひと月が始まるとする考え方です。これは純粋に太陽の 運行だけに基づいて作られる月です。
現在行なわれているかなり多くの占いが、この節月で月を切る考え方 をします。「立春までは前の牟の生まれと見るんですよ」とかいう言葉 が出てきたら、この節月のことを思いおこしてください。
さて、節月は節気に始まり中気を含んで、次の月の節気で終了します。
しかし太陽の進行は一定ではないので(これは地球が太陽の回りを円では なくて楕円軌道を描いて回っていることに起因します)節月の長さは 一定ではありません。
旧暦を作る場合も実はこの節月を意識して、月の名前を決めるのに
その月の中にどの中気を含むかで決定します。
すなわち本来の原則は
雨水を含む月を正月、春分を含む月を2月、穀雨を含む月を3月、
小満を含む月を4月、夏至を含む月を5月、大暑を含む月を6月、
処暑を含む月を7月、秋分を含む月を8月、霜降を含む月を9月、
小雪を含む月を10月、冬至を含む月を11月、大寒を含む月を12月、
とするのです。

3.天保暦の置閏法
さて、節月は太陽の運行に正確に基づいた暦で、旧暦の方は月の運行 に正確に基づいた暦ですから、どこかで両者は狂ってきます。
つまり、節月は平均支ると365. 2422 + 12=30. 4日くらいになりますが、 旧暦の月はそれより短い平均29. 5日くらいですから、どこかで中気の 無い月が発生してしまうのです。
実はこれが当初の閏月の入れ方でした。
-p2

例えば秋分がある月の終りの方に来て、次の月には中気が入らず、霜 降はその次の月の始めの方に来る、などといったことが起きたときに、 その中気を含まない月を閏8月と呼んだのです。
これでうまく行きそうな気がするのですが、実はなかなかそううまく は行ってくれません。
実は天保暦の前の寛政暦の場合は二十四節気を実際の太陽の運行に正 確にもとづいて決めるのではなく、平均太陽(1年を通して一定速度 で黄道上を運行すると考えた仮想天体)の位置により二十四節気を決 めていました。すると本当の季節の動きとは少しだけずれてしまいま すが計算は簡単です。
そして、この平均太陽にもとづいて二十四節気を決めれば、置閏法は 上記に書いた通りでいいのです。
しかし天保暦は太陽の運行に正確さを要求しました。その結果何が起 きたかというと、中気を2つ含む月が時々発生するようになったので す。
するとここで月の名前を決める原則が崩れてしまいました。本来のど の中気が入るかによって月の名前を決める方法を貫こうとすると2つ 入っている月はどちらをとっていいのか分かりませんし、どちらを取 っても、例えば7月の次がいきなり9月になるといった「飛び月」が 発生してしまいます。また、その分だけ中気の無い月が多く発生しま すので、閏月もやたらと発生します。
インドの民間暦などでは同じ日付が2日続いたり、1日飛んだりする ことがあるようですが、日本では月の名前が飛ぶことを嫌ってここに 調整を入れることにしました。
すなわち本来の月の名前を決定する規則を少し緩和して、次のように 定めたのです。
(本来)雨水を含む月を正月、春分を含む月を2月、穀雨を含む月を3月、 小満を含む月を4月、夏至を含む月を5月、大暑を含む月を6月、 処暑を含む月を7月、秋分を含む月を8月、霜降を含む月を9月、 小雪を含む月を10月、冬至を含む月を11月、大寒を含む月を12月 とする。
(緩和)春分を含む月を2月、 夏至を含む月を5月、 秋分を含む月を8月、 冬至を含む月を11月 とする。
そして、この原則だけは守ってその他の月はずらして調整を計った訳 です。3ヶ月に一度だけー致させる訳ですから、これでなんとか月の 名前を付けることができます。そして閏月はこの原則に沿う範囲でど れかの中気の無い月に設定します。
旧暦の作り方⑷
4.過去の例外規定
-p3

ここまでで天保暦の作り方は完成していますが、実は日本の歴史を振り かえると、こういった天文事象から正確に導き出された暦を恣意的に無理矢理変更している場合があります。(天保以降にはやっていません。)
これには次のようなものがあります。
•章首の年の11月1日が冬至にぶつかるように調整する。また章首 以外の年ではぶっからないように調整する。
•大の月が4ヶ月連続するのを避けるように調整する。
•閏八月が発生しないように調整する。
•閏年の総日数が余り大きくなりすぎないように調整する。
•その他? ?
これはほんとうに恣意的なものですから、今旧暦を作る場合は無視して いいのではないかと思います。
-p4
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
30°の中気を含む単位で月を計算しているのまでわかりました。あと、『天文の計算教室』を買って計算式を学ぶしかないですね。今のところ最大の疑問は、現在参考にしている黄経の計算式を
https://stjarnhimlen.se/comp/ppcomp.html
でやっており年が過ぎると誤差が増えてしまいます。この辺も天文の知識が無いと難しいですね。奥が深いです。

お礼日時:2019/11/18 18:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!