古事記をそのまま読む―資料10
《トップ》 目次など 《関連ページ》 魏志倭人伝をそのまま読む

2022.06.06(mon) [59] 日食のモデル~部分日食範囲・継続時間 
  食分p/L
太陽の視半径を、月の視半径を、両者の中心間の距離をとすると、
  食分(r+rーd)/2r
 日本書紀では、〈推古天皇〉三十六年を初出として、いくつかの日蝕が記述される。 それらの信憑性を検証しようとすれば、それぞれ実際にはどの地域でどの程度の食分右に説明で見え、 どのくらいの時間観察可能だったのかを、推定しなければならない。そのための基礎知識として、一般的な傾向を知っておくことが必要である。 ところが、皆既日食〔や金環日食〕についての説明は本当に多数あるが、部分日食については納得できる科学的説明を簡潔にまとめた資料は、なかなか見つからない。 だが、歴史記録を検討する上では、むしろ部分日食が大切なのである。皆既日食に遭遇する確率はかなり小さく、部分日食に比べて文書資料は相当少ないと思われる。
 そこで、部分日食の主な点を単純化したモデルを考えた。その妥当性については、「NASA ECLIPSE WEB SITE」の例を見て判断した。 ここでは、その学習の経過をまとめる。

図1
【部分日食の範囲】
 地上のある一点で皆既日食が見られるとき、ある瞬間における部分日食の範囲と食分については幾何学モデルによって容易に求めることができる。 一方時間的な経過については、部分日食が始まってから終了するまでの時間は2~3時間と言われるが、その大きな差を生じる原因はどこにあるのか。 こちらは一筋縄にはいかないことがわかった。
 
【ある時刻における部分日食】
《皆既日食点からの距離と食分》
 太陽と月の視直径はほぼ等しいことが知られている。天球上の二点間の距離は視角で表すことができ、これを角距離という。 太陽や月の見かけの直径〔視直径〕も角距離で表す。
 地球、月はともに楕円軌道なので、地球からの距離は変化して太陽、月の視直径は実際には変動する。 皆既日食においては、月の視直径≧太陽の視直径で、月の視直径<太陽の視直径のときは金環食となる。 ここでは、概略的に両者とも常に一定で、太陽と月の視直径は等しいとする。
 月の視直径の平均値:
  月の直径3476km÷地球・月の平均距離384400km=0.904(ラジアン)=0.518°
 よって、以後0.52°を用いる。
 よく知られているように、地上の皆既日食帯の周囲では部分日食が観察される。 今、皆既日食が見られる地点〔以後「皆既日食点」〕からの距離とすると、が大きくなるにしたがって食分はだんだん小さくなり、 遂には重なりがなくなる〔=日食の観測範囲外〕
 観察者から見て、特に太陽・月が鉛直方向に並んでいるときは、両者の角距離は、地上からの仰角の差(b-a)になる。
図1から:
   a=cot-1(x/Da)  b=cot-1(x/Db)
  ∴ y=cot-1(x/Db)ーcot-1(x/Da)……〔数式1〕
図2
《太陽高度が90°の場合》
 それでは、部分日食は具体的には地球上のどれだけの範囲を覆うのだろうか。前項では、地面がどこまでも平面としたが、 地球は球体であるから、広い範囲で考える場合は地平面への投影線を考えた上で、その線と球面との交点を考える必要がある。
 ここではわかりやすく、皆既日食点を赤道上として、太陽も月も仰角90°、すなわち天頂にあるとする。 このとき、太陽-月を結ぶ直線が地球の中心を通る。 その時は図2のようになり、ここでは赤道、は地球の中心を示す。 今、OEに垂直な平面ONを考え、この平面を地表面と考える。 は平面ON上でからの距離。ただし、数式を煩雑にしないために地球の半径を1とする。実際の距離dkmとの関係は、x=d/6366kmとなる〔地球の半径で割る〕
 図2で、α=1/2(a+b)とする〔すなわち太陽・月の中心を結ぶ線分の二等分点〕から仰角αの直線が球面を通過する点が、観察者の位置である。その緯度を度とする。
 そのときのαの関係は、
  z=sin-1((ⅹ-cotα(cscα-x))/cscα)……〔数式2〕
 となる。
 具体的には、〔数式1〕α=(a+b)/2=(cot-1(x/Da)+cot-1(x/Db))/2Da=149万6000km〔太陽までの距離〕Db=38万4000km〔月までの距離〕。 ここでは、地球の半径6366kmとしたときの相対値を用いる。 〔数式2〕により、任意のによって、対応する緯度が求まる。
食分1.00.80.60.40.20.0
緯度6.3°12.6°19.0°25.8°32.9°
緯度差6.3°6.3°6.5°6.7°7.1°
 そのときの食分は、(Rs+Rmーd)/2Rsとなる。
 ここでRmRs0.26°の仰角の差d=|aーb|である。d>Rs+Rmの場合は負数になるが、 これはつまり太陽と月の重なりがないときで、定義外とするか、または食分0に置き換える。
 ちょうど食分0になる位置になる境界の点の緯度が、部分日食が観察可能な北限になる。
 このときの計算の結果は、右表および図3の通りである。 南北におよそ緯度32.9°ずつが部分日食が観測できる範囲となる。
図3
《太陽高度が90°未満の場合》
 太陽高度〔仰角〕が90°未満とは、結局地表への入射光が地球の中心を通らないということである。 これは、図2の光線はそのままに地球の位置を上下に動かしたモデルとなる。 〔数式2〕は実際には、もっとも中心点から離れたx=1〔6366km〕のところでもα=89.53°≒90°だから、zがそんなに大きくない間はcotα≒0cscα≒1と考えて差し支えない。 よって、簡略化すると次の式になる。 
 z=sin-1……〔数式3〕
 この式を用いて二つの場合の緯度と食分との関係を試算した(図3)。
  食分0のラインが北極点を通る場合…北緯26.8°で食分1、南緯5.6°で食分0となる。
  食分1のラインが北極点を通る場合…北緯26.8°で食分0となる。
 説明図を添えたが、概念的なものである。 地球上の任意の点に当てはめるときは、球面座標における座標変換を行えばよいが、計算式は複雑である。 ここでは任意の二箇所を、赤道上とその真北の点に置き換える方法のみを示す(次項)。これにより、最低限現実のデータを赤道正面の座標に置き換え、モデルと比較することができる。 さらに現実の地球に近づけるためには、楕円体への投影が課題となる。

【任意の二点の座標変換】
 例えば、実際の日食データからひとつの皆既日食点と、皆既日食帯に垂直方向にある食分0の点を、赤道上の一点とその真北の一点に置き換えることは容易である。
 幾何学の表現としては、ひとつ球面上の2点を両端とする大円の孤の中心角を求める操作に相当する。 計算は比較的容易で、①2点を球面座標(r,θ,φ)から直交座標(x,y,z)に変換する。三平方の定理によって2点間の直線距離を求める。 半径rの円周上で直線距離をdとする孤の中心角αを求める。その説明図と計算式を、図3に示した。 同じ球面上なのでr=1として、純粋に角の間の関係となる。この計算をエクセルで簡便に行うことができる。
エクセルデータ;左上セルがA1。
N1=30θ1==90-B1=D1*PI()/180x1==SIN(E1)*COS(E2)
E1=130φ1==B2=D2*PI()/180y1==SIN(E1)*SIN(E2)
z1==COS(E1)
N2=40θ2==90-B4=D4*PI()/180x2==SIN(E4)*COS(E5)
E2=140φ2==B5=D5*PI()/180y2==SIN(E4)*SIN(E5)
z2==COS(E4)
d==SQRT((G1-G4)^2+(G2-G5)^2+(G3-G6)^2)
α==2*ASIN(G7/2)
(度)=G8*180/PI()
 セルA1を左上隅として、上の表のデータを書き込む。ウエブブラウザとエクセルの通常の使い方なら、表を丸ごとコピーアンドペーストすることが可能である。
 エクセルのセルに上表を設定すると、(N1、E1)を赤道に移したことに伴って移動した(N2,E2)の緯度を得ることができる(ピンク色のセル)。
 地球上の緯度・経度との関係は、 経度については、北緯N°とするとθ=90°ーNとなる。南緯10度の場合はN=-10°とする。 緯度については、東経がプラスでφ=Eとなる。西経40°はE=-40°とする。 なお、黄色のセルが入力する箇所で、仮データが入っている。

【各地の日食継続時間】
 部分日食観測点において、欠け始めから欠け終わりまでの時間〔「日食継続時間」と呼ぶ〕は皆既日食ライン上に比べ、短くはずである。 その量的な関係をモデル上で考える。
 今、太陽・月の見かけの直径は等しく、とする。すると、中心点の間の距離がだんだん小さくなり、d=1のとき第一接触〔月・太陽の円周が接した瞬間〕になる。 そして、d=0のときに皆既日食になる。
 月は(白道)上を西から東に移動していく。これは、月の公転を表す。
 皆既日食では白道は太陽の中心点を通るが、部分日食では太陽の中心点を通らない()。 今、太陽の中心から白道に落とした垂線の角距離をとする。
 p=0のとき皆既日食、0<p<1のとき部分日食、p>=1では日食は観測されない。
 では太陽は白道上にあり、d=1で第一接触となる。 ところが、p>0の場合は、の第一接触の時刻になってもまだ日食は始まらない。 d>1だからである()。
図4
図5
図6
 d=1になるのは、のときである。 このとき、第一接触から食分最大点までの月の中心点の移動距離は√(1-p)である。 これがに日食継続時間に比例することになる。
 日食継続時間は当然皆既日食ラインが最大で、ラインに垂直方向に離れるほど短くなる。 部分日食観測地域のある点における最大食分と、その日食継続時間との関係は、図5のグラフになる。
 グラフの最大食分に、前項で求めた対応する緯度差を書き添えた。 地上の皆既日食ラインから垂直に緯度20度相当(2222km)離れた地点では、 最大食分は0.4、全継続時間は皆既日食ラインの8割ということになる。

【地球の自転と日食継続時間】
 日食継続時間は、観測位置の条件によって異なる。その条件要素は2つあり、ひとつは緯度で低緯度地方で長くなる。 もう一つは日食が観察される方角で、真南で長く西または東にいくと短くなる。
 その原因は、地球の自転である。月は地球を公転しているから、白道の上をなめらかに動いている。 仮に月の軌道が新円ならば、その速さは一定で、角速度〔見かけの速さ〕は「360°÷(公転周期(日)×24時間)=0.55°/時」である。 但し、実際には月の公転は楕円軌道なので、一か月を周期とする増減がある。 この速さで月が移動し、太陽に少しでも重なるのは、図6で示したように視直径×2の範囲にあるときである。 視直径が0.52°のとき、単純計算ではそれに要する時間は0・52×2÷0.55°=1.9時間ほどのはずである。 地球の公転による太陽の動きもあるが、月の移動する速さの1割以下なので、ここでは無視する。
 ところが、実際の日食継続時間はこれより長く、2~3時間とされる。 その理由は、地球の一点で月の動きを見る場合、自転する地球上にいる観測者は月と同じ方向に移動しているから、見かけの白道上の角速度は実際の角速度よりも遅いからである。 つまり、月の出の月の位置は、平均角速度ではまだそこまで来ておらず、月の入りの位置は実際の角速度では既に通り過ぎた後である。 これを、単純化したモデルを用いて定量化してみる。
図7
図8
図9
《地球上の観察者の位置による仰角の変化》
 観察者は自転する地球に乗っているから、月に向かって右から左に半日かけて移動する。
 その影響を考える前提として、地球上での位置移動に伴う月の仰角の変化について考える。
 図8で基準点をとして、ある時刻にだけ離れた場所にいるとする。は、月までの距離としたときの相対値である。 地球は平面として、はその平面における点からの距離である。 点の月の仰角をする。今、月の見える向きと逆方向にだけ移動し、そのときの仰角をとする。
 aは、月と反対方向に進んだ時に正の値をとることにすると、 a>0のときy<xa<0のときy>xとなる。
 そのときのの関係:
  y=tanー1(sin(x)/(cos(x)+a))……〔数式4〕
 その関係に具体的な数値を当てはめたグラフが、図7である。 地球の半径6370kmは、a=0.168に相当する。
 このグラフを見ると、x-yは、aに比例するように見え、また仰角が大きいほど大きく、その関係はsin(仰角)のように見える。
 地球上での移動では、ほぼx-y=asin(x)〔単位ラジアン〕である。
《月の見かけの位置》
 ここでは極端に単純化して、黄道傾斜角〔23.4°〕、白道傾斜角〔黄道に対して5.9°〕は無視し、赤道面と白道面が一致するとする。
 この場合、真東から月が出て6時間後には天頂に達し、さらに6時間後に真西に沈む。
白道上の平均角速度=360°÷27.3(日)〔月の公転周期〕÷24時間=0.549°/時
 月の出から月の入りまでの12時間の、白道上の月の移動は0.549×12=6.59°である。 しかし、地球の自転による見かけの月の移動は6.59°より小さく、4.67°となる。 その白道上の位置の見かけのずれをグラフで表すと、図7のようになる。 これを、地球の自転がないときの動きと合成すると、のグラフになる。
 そのときの式:
  u=ωt+tan-1(1/((M/r)cos(15t))
 ここで、については月が南中する6時間前を0とする。白道上の位置は、時刻=0のとき、=0、時刻のときu°。 地球-月間の距離km〔平均38万km〕、地球の半径km〔6370km〕
 の意味は、t=0において、見かけの月の位置は標準位置〔自転がないことにしたときの位置〕よりも進んでいる。 t=6において、見かけの位置と本来の位置が一致し、t=12においては、見かけの位置は標準位置に達していない。
《幾何学モデルによる説明》
 上記の数式および、のグラフを導いた過程を説明しておく。
 図10は、月の出と南中における月の見え方を示す。 は、それぞれ月の出と南中の観測者の位置。A1はそれぞれの時刻における白道上の月の位置である。 の仰角∠CQHは90° 仮に地球の自転を止め、観測者が初めから点にいて動いていなかったとすると、最初の時刻における仰角は∠A1QHで、この大きさをとする。
 ここで自転を復活させると、観測者が点にあったときの仰角は∠A1P’Hで、この大きさをとする。 ここで、点の代わりに点における地表面QHに投影した点P’を用いるのは、PQ間の距離のうち白道に平行な成分のみが問題になるからである。
 ここで、月地球間が38万km、地球の直径が6370kmであるから、概算においてはP’は一点としてよい。 よって、仰角は、ほぼ∠B1QHとなり、結局自転による影響はに置き替わるということである。 ∠yにより、Pの時刻における白道上の位置はあたかもB1の如くになり、これが見かけの位置である。
 さらに、観測者はA1からまで移動する。その経過について考える。
 その関係は、上述から:
  y=tanー1(sin(x)/(cos(x)+a)) ……〔数式5〕
 については、点から時間後において、a=(r/M) cos((π/12)t)〔π/12〔=15°〕は地球の自転の角速度〕である。
《継続時間への影響》
図10
図11
 月が白道上を移動し、図10の図で、M1に達した時に、地球上の観察者の位置が月の影に入り始め、 M2になったときに影から脱出する。図8は、P’Qにあたる(図11)。
太陽の黄道上の動き=360°÷365.2422日〔地球の公転周期〕÷24時間=0.040°/時
 なお、ここでは太陽の年周運動の角速度=0.040°/時を考慮し、月の影の範囲(M1M2)を移動させる。
 地球が自転していないければ、M1~M2はグラフのB1~B2に対応し、 その時間は2.04時間〔2時間2分〕である。 ところが、自転している場合は、M1~M2はグラフのA1~A2に対応し、 4.14時間〔4時間8分〕となる。
 つまりA1A2の区間のグラフの傾き〔白道上の月の見かけの角速度〕が小さいほど日食継続時間は長くなる。
 これを見ると、地球上の観測者がの側にいる限り、月の進行速度は遅い。 それを取り戻すのが、月と反対側に回った時()で、 その間に見かけの運動のスピードは逆に平均的なスピードを上回り、翌日の月の出には今日と同じ位置関係となる()。
《緯度による日食時間帯の移動》
 これまで見たように、日食の時間帯は月の出に近づくほど早い時間にずれ、 日の入りに近づくほど遅い時間にずれる。かつ、そのずれの大きさは低緯度ほど大きくなる。これを直感的にはどう理解すればよいのだろうか。 それを説明したのが図12である。
 今、赤道上の地点と、北極点に近い地点を考える。 この図では、よりも西にある。 白道を通る月の動きは両地点で同じであるが、で見た位置は、で見る位置に先行する。 月の入りに近づくと逆にの方がより東になり、で見る位置は、が既に通過した位置を追っている。
《実際の日食継続時間》
図12
 この日食継続時間4時間8分という値は、赤道面と白道面との傾斜を0とする仮想的なものであり、実際にこの状態になることはない。 〔数式4〕の値は、次の条件によりこれより小さくなる(図12)。
●白道面と地球との交面の緯度が高いほどが小さくなる。
●同一の日食でも経路内でも緯度が変わり、高緯度にいったときにが小さくなる。
●月の出、月の入りに近いうちは、の変化が小さくなる。
●白道面と赤道面が交わる角度は0でないから、自転による角速度の白道面方向の成分が小さくなる。これが全体にを小さくする。
 なおa=0になることは瞬間的には存在し、北極点または南極点を通過するときである。
《公転軌道が楕円であることによる影響》
 実際には月は楕円軌道で、近地点35万7000km、遠地点40万6000kmとされる (国立天文台)。
 ケプラーの第二法則〔面積速度一定の法則〕によって、ωdは一定値を保つので、角速度は距離の二乗に反比例するから、 遠くにあるほど小さくなり日食継続時間を長くするω:角速度、:月-地球間の距離〕。 それに対して視直径に反比例するので、遠くにあるほど日食継続時間は短くなる。
 38万4000kmを基準とすると、は、角速度116%(0.64°/時)、視直径108%(0.56°)、は角速度89%(0.49°/時)、視直径95%(0.49°)。 よって日食継続時間は、で93%、で107%となる。 のときB1B2はさらに減少して、1時間54分、 のときA1A2はさらに拡大して、4時間26分となる。
 これらは極端な場合で現実にはほぼあり得ないから、このモデルは一般に言われる「日食継続時間2~3時間」に合うとみてよいだろう。

まとめ
 月の白道上の速さには幅があり、また太陽・月の視直径も条件によって変わるから、ここで考えた程度の計算では全く不十分である。 しかし、適当な値を仮定した場合の部分日食が見える範囲と食分、継続時間などを基本的な事柄を推定する手段が見つかった。 これは、さまざまな日食範囲の図を見るときにその深い理解にも繋がるものである。
 ここでは概略的なモデルを知れば十分だったが、実際には予想外に歯応えがあり、一定の理解に至るまでに相当の時間を費やした。 現象に対する独自の方法による解釈も含まれ、その妥当性の検討は未だ不十分であるが、きりがないのでひとまず締めくくることにする。 これからも検討を続け、問題となる箇所が出てくればその都度修正する。



2022.06.13(mon) [60] 日食のモデル~観測する食分の分布 
図1
図2
 資料[59」【ある時刻における部分日食】の項では、ある土地で部分日食を観測するときの食分の計算法を考察した。 そこでは、食分の大きさを、皆既日食観測点からの距離によって求めることができることを示した。 すなわち、皆既日食観測点を通る影が地中を貫いたとして、図のラインON上の距離ABが、地上の点における食分の大きさを決める(図1)。 を通る太陽光とONとの交点がを通る太陽光とONとの交点がである。
 に入る光線は、どの地点にどの入射角で入ったとしても、光線とを含む平面を設定することができる。 それは、と光線の出口、およびの三点を含む平面は、必ず存在するからである。 三点が同一直線上にあれば平面は無数あり、同一直線上になければ平面は一通りに定まる(図2)。 1図との関係では、を通るFGの垂直二等分線の、 直線FGとの交点が、球面との交点がとなる。
 この球面をを中心とする三次元の直交座標に置き、各座標軸を軸として適宜回転させて座標を変換すると、 を北極点、を東経0°線の点として表すことができる〔この座標変換を、ここでは正規化と呼ぶ〕正規化の方法については資料[61]で述べる。 中心角∠POEは、正規化したときに緯度となる。
 ところが、任意の点で食分を求める操作は、資料[59]では〔食分を求める点〕がFを通る円周〔正規化するとFを通る子午線〕上の点に限られていた。 これを、子午線から東西方向に離れた地点でも定量的に求める方法を考える。

【食分の二次元方向への広がり】
《食分等価点》
 今、図3のように、を通って入射太陽光と垂直な平面を想定する。直線ON上にある。 上で、を中心としてAB〔=とする〕を直径とする円周上の点は、における食分と同じ値をもつ。以後、同じ食分となる点を食分等価点と呼ぶ。
 がその円周上の一点だとする。に対応する球面上〔即ち地表面〕の位置は、を通る太陽光線が球面と交わる点球面座標を求めればよいことになる。
 なお、以後正規化したときの地球の中心から北極点に向かう直線を、直交座標z軸上にありz軸に直行する直線をy軸とする。 こう決めると、地表面上の緯度経度に直すときに都合がよいからである。
図3
《U上の食分等価点》
 平面上の食分等価点は、z軸上のを中心として直径をとするzy平面上の円周である。 の座標表現については、まずU上でz軸に平行にだけ離れた直線mを考える。 図3では、AB間の距離f=|b-a|が食分の大きさを決める。 図から、
  q=√(fーa)²ーp²+a
 この(p、q)からx軸方向に立てた垂線と球面と交点球面座標(次項)が定まる。
《球面座標》
図4
 ここでは、単純化するために球の直径=1とする。Kはその球面上の点で、K、p、qの関係は図4のようになる。
 このときのK点の直交座標は:
   (x,y,z)=(√1ーp²ーq²,p,q)
 球面座標に変換すると:
   (r,θ,φ)=(1,cos-1(q),cos-1(√(1-p²-q²)/(1-q²))
 経度・緯度は球面座標系に似るが、緯度の「赤道0°、北極90°」に対し、球面座標系は「北極0°、赤道90°」である。
 ただし球面座標系はラジアン〔radian〕を単位とするので、換算式は、「緯度(°)=(180/π)(π/2ーθ)」となる。 南緯は負数とする。
 経度は、φをそのまま〔°〕にすればよいが、東経または西経を負の値で表す必要がある。φがz軸のプラス側から見て反時計回りに定義されていることから、東経を正とするのが適切である。
《食分の簡略計算》
 資料[59]で見たように、y軸上のある位置における仮食分(下述)は次のようになる。
  w=(Rs+Rm-(cotー1(U/Ds)ーcotー1(U/dm))×180/π)/2R
 ここで、:y軸上の皆既日食点からの距離、Ds:地球・太陽間の距離、Dm:地球・月間の距離(以上km)、Rs:太陽の視半径(°)、Rm:月の視半径(°)
 cotー1の単位はラジアンなので、°に揃えるために、180/πをかける。〔逆にRs、Rmにπ/180をかける方法もある。〕
 1≧食分≧0だからこの式では範囲外の値が出るので、は「仮食分」と呼ぶことにする。 真の食分Wとの関係は:
  W=|w| (ー1≦w≦1)
    0   (w>1またはw<ー1)

 が0に近い時は、近似式「cotー1(x)≒π/2-x」が成り立つから、cotの部分は:
  cotー1(U/Ds)ーcotー1(U/dm) ≒ (π/2ーU/Ds)ー(π/2ーU/Dm)=U(1/mー1/s)
  そこで、Ds=1.496×10km、Dm=3.840×10km、Rs=Rm=0.26°のとき、
  w=1ー1.488×10ー4U/0.52
 この定数は、U=10000(地球の半径の約1.6倍)まで広げても、厳密式:1.48791…、近似式:1.48824…で、 太陽、月の視半径の標準値を0.26°とするように有効桁数がわずか2桁なら、誤差は全く問題にならない。
 この式で、w=1とすると、U=3495である。 よって端的に言って、食分の0.2の変化は、Uを699km変化させる。

【試算の例】
《仰角90°》
 現実的にはまず起こり得ないが、基本中の基本として皆既日食点が赤道上にあり、太陽と月との仰角=90°の場合を考える。
図5  
 zy面上で食分0.8になるのは、皆既日食点から直径699kmの円周上である。 皆既日食点は赤道上にあるから、a=0。また、b=f=699÷6366=0.1098
 これらの値に基づき、エクセルによって計算する(図5)。 zy面上のy軸の平行線への距離を適当に選び、直径の円周上の点の座標をいくつか求める。p=fのときm上の点は1つ、 p<fのときm上の点は2個ある。なお、p>fの場合は√(fーp)は虚数となり、交点をもたない状態を表現する。 zy面上で求めた各点の座標を球面に投影し、その球面座標θφを前項の公式を使って求め、さらに北緯東経に変換する。
 食分0.60.40.2の点についても同様に計算し、これらをグラフにする(図5)。
 この場合、グラフはきれいに同心円となる。この条件では、球面はほぼzy面と平行な平面にかなり近いからである。 各円の赤道との東西の交点の経度が南北の交点の緯度と等しくなるのは、赤道においては経度の10度の間隔が緯度10度の間隔と等しいからである。
《仰角63.2°》
図6
図7
Ud(degree)u=U-aacot(u/Db)←debreeacot(u/Da)←debree(Rs+Rm-d)/2Rs
6=(E4-10)/$C$15+$D$7=J4-L4=F4-$D$7=IF(H4=0,PI()/2,ATAN($C$4/H4))=I4*180/(PI())=IF(H4=0,PI()/2,ATAN($D$4/H4))=K4*180/(PI())=($C$11-G4)/$C$10
 皆既日食点での仰角の値は、一般に0°から90°まであり得る。 仰角が90°未満の場合は、正規化したとき、皆既日食点を通る太陽光が赤道以外を通る場合にあたる。 図7中心角αは、正規化したときの緯度に相当する。仰角β=90°ーαである。 この場合、z=aにおける食分の式は、仰角90°における(cotー1(U/Ds)ーcotー1(U/dm))(U-a)に置き換え、 (cotー1((U-a)/Ds)ーcotー1(U-a)/dm))とすればよい。(図6) 近似式では、699(U-a)が、食分0.2の範囲を表す。
 そのひとつの場合として、正規化した状態で食分0のラインが北極点を通る場合を考えてみる。 計算してみると、このときa=2871.4km〔地球半径=1のとき、0.45105皆既日食点北緯26.8°にあり、仰角90°-26.8°=63.2°となる。 食分は、図8のように分布する。0.4までは同心円に近いが、そのその外側は北極方向に広がる。 0.2~0は大きく広がるが、これは実際に仰角が0に近づくことによる面積の拡大と、緯度経度を直交座標にしたことによる歪みの重ね合わせである。 北緯89°以上のところで不自然に東西に広がっているのは、実際にはごく狭い部分に計算誤差が極端な形で表れたものである。
図8

《仰角0°》
 仰角0°では、太陽の約半分が水平線上に出ている。なお、標高が高いと水平線を見下ろす形になり、標高66mで水平線の俯角が0.26度となり、太陽が全部見えるようになる。
 正規化したポジションでは、北極点で太陽が水平線にあるときの皆既日食にあたる。食分0以上の区域の多くは地球の外になっている。 このときの食分の分布は図8である。 東西に経度90°に近づくと、グラフはほぼ水平となり、90°では計算不能である。物理的には越えると太陽光の当たらない面となることに対応している。 緯度経度を直交座標で表すと、高緯度で東西方向に大きく拡大する。
 で食分0の南限は26.8°で、の食分1点に当たる。

【メルカトル図法】
図9
図10
 以上の計算結果を、試しにメルカトル図法の地図に投影してみる。
 メルカトル図法における座標は:
  (x,y)=(φ,ln(tan(π/4+θ)) 〔φ:経度 θ:緯度〕
 各点の経度・緯度の値をエクセルを用いてこの公式で変換して、グラフ化した。 そのグラフを、東経140°の経線を中心として地図に重ね合わせたものである。 図10のように緯度・経度の基準位置を加え、正しく重ね合わせるための目印にする。 なお、現在のエクセルのバージョンでは、データの中に空白セルを挟むとグラフのラインが切断され、あたかも複数のグラフのように表すことができる。〕
 メルカトル図法は方位を完全に維持するが、反面高緯度になると面積が極端に増加する。 緯度0°40°80°のときの拡大率を比べると、赤道を1とすると、距離で1:1.3:5.8、面積で1:1.7:33.2となる。 よって、全世界のような広い地域を表すには不向きな図法であるが、大変広く使われている。

まとめ
 もし太陽、月の視半径が変われば食分ラインの範囲も変わる。 視半径を決めるのは、地球との距離である。太陽の平均の視半径は69万3000km(実半径)÷1億4960万km(太陽までの平均距離)=0.00463(ラジアン)=0.265°、 月の平均の視半径は1737km÷38万4000km=0.00452(ラジアン)=0.259°である。 エクセルの太陽と月までの距離、視半径を入れるセルの値を変えることによって対応できる。
 正規化した形で食分の分布図を作り、座標変換をすれば任意の位置について分布を求めることができることになる。



2022.06.16(thu) [61] 日食のモデル~球面の座標変換 
図1
 黄道面、白道面の傾斜角を0とすれば、地球上の食分の分布は容易に求めることができる。 皆既日食点の経路についても、これらの傾斜角が0ならば単に赤道に平行な円となり、座標は単純である。
 現実の日食をシミュレートするにはまず傾斜角0として、かつ赤道を中心とする単純なデータを作っておき、球面座標上の点を三軸について回転させて座標変換を行えばよい。

【球面座標の回転移動】
 球面の座標を回転させたとき、その上の一点の座標がどのように変わるかを考える。 手順としては、球面座標を直交座標に変換し、直交座標を回転させ、球面座標に戻せばよい。
《球面座標と直交座標との相互変換》
 球面座標と直交座標の相互の変換公式は、資料[60]の図4に示した。
《三次元直交座標の回転》
 直交座標系は、図1のようにして原点を中心として座標軸を回転させることができる。 座標の変換は、一般的に物体を動かさずに座標軸を動かし、新座標を旧座標による演算式で表す形をとる。 ただ、座標を動かさずに物体の方を動かしても物理的には同じことで、その方がイメージし易いのならそれで差し支えない。
 原点を中心とする座標の回転は、x軸、y軸、z軸のそれぞれを軸とする独立した回転の重ね合わせである。
 旧座標を(x,y,z)、新座標を(X,Y,Z)とする。z軸を回転軸とする場合は、Z=zである。 回転角は、一般に反時計回りを正とする。回転角θのとき、X=xcosθ+ysinθ、Y=-xsinθ+cosθである。 この類の計算は、行列積の形で表現される(図1)。四則演算の組み合わせを見やすくするための表現である。

【座標を基本位置に移す】
 球面上の任意の座標にある孤を、基本位置に移す。
図3
図2
 エクセルを用いて、その処理を段階的に示した(図2図3)。
 ある地点に置いた孤の両端P1、P2を北緯、東経で入力する。
 球面座標P1を(θ1,φ1)、P2を(θ2,φ2)に変える。半径r=1としている。
 P1、P2を直交座標系に変換する。
 z軸を回転軸にして、P1点をzx面上にもっていく。回転角はφ。P2も連動させる。
 y軸を回転軸にして、P1点をx軸上にもっていく。回転角はθ-π/2。P2も連動させる。
 x軸を回転軸にして、P2点をzx面上にもっていく。回転角はtanー1(y/z)。
 で求めた回転角は、P1から見たP2の向きを表し、これを偏角と呼ぶことにする。また単位をラジアンから°に換算する。
 で求めたP2のz座標は、x軸からの角のコサインに当たる。この角は孤P1P2の中心角にあたる。これも単位を°に換算する。
 これによって、地球上の経度・緯度で示された2点の実距離を得ることができる。〔地球の半径×⑥÷360°〕 ただし、ここでは地球を球体としているので、楕円体モデルによる値からは若干の誤差が生じる。
《使用する関数》
 ここでは、比較的専門的な関数を使っている。
 MMULTは、行列の積。 MMULT(A12:C14,D12:D14)は、
=A12*D12+B12*D13+C12*D14
=A13*D12+B13*D13+C13*D14
=A14*D12+B14*D13+C14*D14
 と同じだが、MMULTを使った方がタイプミスが起こる確率が減少する。 MMULTを使うときは、その直下の(行列の列数ー1)個のセルは空白にしておくことになっている。
 ATAN2は、arctan関数の値が動径が第1象限にあるときと、第3象限にあるときが区別できないという不都合を避ける。 すなわちa=1b=1のときはtan-1(a/b)=45°であるが、a=ー1b=ー1のときもtan-1(a/b)=45°となる。
 後者の場合は225°または-135°にしないとおかしな結果を生じる場合がしばしばある。 ATAN2はこれに対応するもので、2つの引数をとる。 A1≧0、B1>0の範囲では、「ATAN2(B1,A1)」は「ATAN(A1/B1)」と同じ値を返すが、ATAN2は分母になる数を第一引数にすることに気を付ける必要がある。 なお、ATAN2はatanでは分母=0になる場合でも、値π/2またはーπ/2を返すようになっており、 この点も便利である。
 図に示したセルに入れた数式等を、下に示す。エクセルの通常の使用状態なら、A1セルからペーストすれば機能する。
訂正済
〔A1〕P1 P2
北緯1=30北緯2=40
東経1=130東経2=140
 
θ1==(90-E2)*PI()/180θ2==(90-H2)*PI()/180
φ1==E3*PI()/180φ2==H3*PI()/180
直交座標形式に変換
x=rsinθcosφx1==SIN(E5)*COS(E6)x2==SIN(H5)*COS(H6)
y=rsinθsinφy1==SIN(E5)*SIN(E6)y2==SIN(H5)*SIN(H6)
z=rcosθz1==COS(E5)z2==COS(H5)
=E6γ(=φ)z軸を回転してP1をzx面上(y=0)に
=COS(A11)=SIN(A11)=0=E8=MMULT(A12:C14,D12:D14)=H8=MMULT(A12:C14,G12:G14)
=-SIN(A11)=COS(A11)=0=E9=H9
=0=0=1=E10=H10
=E5-PI()/2β(=θ-π/2)y軸を回転してP1をx軸上(y=0,z=0)に
=COS(A15)=0=-SIN(A15)=E12=MMULT(A16:C18,D16:D18)=H12=MMULT(A16:C18,G16:G18)
=0=1=0=E13=H13
=SIN(A15)=0=COS(A15)=E14=H14
=-ATAN(H17/H18)α(=-arctan(y/z))x軸を回転してP2をzx面上(y=0)に
=1=0=0=E16=MMULT(A20:C22,D20:D22)=H16=MMULT(A20:C22,G20:G22)
=0=COS(A19)=SIN(A19)=E17=H17
=0=-SIN(A19)=COS(A19)=E18=H18
 
P2偏角arctan(y/z)極座標系に変換中心角
=ATAN2(H18,H17)radianθ=cos-1(z/sqrt(x2+y2+z2))=ACOS(H22)*SIGN(H20)radian
=B25*180/PI()+IF(B25<0,360,0)degree=90-G25*180/PI()degree


【座標を基本位置から移す】
 前項とは逆に、球面上の基本位置に置いた孤を、任意の位置に移す。 基本位置とは、直交座標の(1,0,0)を孤の一端として、中心角と偏角を与えたものである。
 これについても、エクセルのセルに入れる数式等を示す。
P1P2
北緯1=30degree偏角中心角
東経1=130degree36.5460841576098degree12.9083degree
=E3*PI()/180radian=G3*PI()/180radian
θ1==(90-B2)*PI()/180radian
φ1==B3*PI()/180radianx1==1x2=cos(α)==COS(G4)
y1==0y2==0
z1==0z2=sin(α)==SIN(G4)
=E4α(=偏角)x軸を回転してP2をzx面上から離す
=1=0=0=E6=MMULT(A10:C12,D10:D12)=H6=MMULT(A10:C12,G10:G12)
=0=COS(A9)=SIN(A9)=E7=H7
=0=-SIN(A9)=COS(A9)=E8=H8
=PI()/2-B5β(=π/2-θ1)  y軸を回転してP1をx軸から離す
=COS(A13)0=-SIN(A13)=E10=MMULT(A14:C16,D14:D16)=H10=MMULT(A14:C16,G14:G16)
=0=1=0=E11=H11
=SIN(A13)=0=COS(A13)=E12=H12
=-B6γ(=-φ1)  z軸を回転してP1をxz面から離す
=COS(A17)=SIN(A17)=0=E14=MMULT(A18:C20,D18:D20)=H14=MMULT(A18:C20,G18:G20)
=-SIN(A17)=COS(A17)=0=E15=H15
=0=0=1=E16=H16
極座標系に変換
r=sqrt(x2+y2+z2)=SQRT(H18^2+H19^2+H20^2)
θ=cos-1(z/sqrt(x2+y2+z2))θ2==ACOS(H20/H22)
φ=sgn(y)cos-1(x/sqrt(x2+y2))φ2==SIGN(H19)*ACOS(H18/SQRT(H18^2+H19^2))
 
P2北緯2==90-H23*180/PI()
東経2==H24*180/PI()
図4
 ある地点に置いた孤の一端P1の目的位置を北緯、東経で入力する。
 P1を、ラジアン単位の球面座標(θ1,φ1)に換算する。
 孤の長さを意味する中心角と、向きを表す偏角を°単位で入力し、これもラジアンに換算する。
 P1を初期位置(1,0,0)に置き、x軸から中心角だけ離れた点をzx面上に設定してP2の初期位置とする。
 x軸を回転軸にして、zx面上のP2を中心角だけ回転させる。
 y軸を回転軸にして、P1点をx軸から回転させる。回転角はθ1-π/2。P2も連動させる。
 z軸を回転軸にして、P1点をzx面面から回転させる。回転角は-φ1。P2も連動させる。
 P2を、球面座標系から直交座標系に換算する。また、経度・緯度に換算する。
 入力された数値の例では、前項で得られた中心角と偏角をそのまま用い、裏返しの操作によって元に戻ることを確認する。 実際に用いるときは、P1も任意の値を設定する。

まとめ
 今回取り上げた座標操作手順については、名前がないと不便なので次の仮称を用いる。
 ●一つ目の操作は、二地点の緯度経度を中心角偏角を求めるものであるから、中心角モデル
 ●二つ目の操作は、ある地点を起点として中心角偏角によって対象地点を求めるものであるから、対象地点モデル
 日食の皆既日食点の経路をシミュレートするには、まず黄道傾斜角を0とした仮想の地球上に単純化された経路を作り、 中心角モデルによって中心角と偏角を求める。そして仮想地球を必要な量だけ回転させ、中心角と偏角から対象地点モデルを機能させる。。
 食分分布図については、やはり仮想の地球上に分布図を作り、等食分線上のいくつかの地点に中心角モデルを適用し、仮想地球を回転させて対象地点モデルを機能させる。
 試行した結果は、今後示す。

 訂正:図2のフォーム;G25セル。(2022.06.21)


2022.06.19(sun) [62] 日食のモデル~エクセルのマクロ関数 
 資料[61]において、球面座標変換のツールを構築したが、これを使ってグラフを作成しようとすると大量のデータを一つずつセルに入力して、 結果を一覧表のセルに数値コピーするという、かなり効率の悪い作業になる。 そこで、ひとつのシートを丸ごと関数のように使う方法があることを期待して探したが、見つからなかった。
 しかし、エクセルには自作の関数をVBAというプログラミング言語で作成して組み込む方法が用意されている。 VBA〔Visual Basic fot Applications〕は、昔なつかしいBASICの拡張である。 表計算ソフトにアプリケーション用の言語という組み合わせは中途半端なので、 これまで使ったことはなかったが、試みたところ案外うまくいったので、その経過を報告する。
 
【準備】
 まず、プログラムを作る環境にたどり着かねばならない。その経路は、現在のオフィス365バージョンでは次のようになっている。
ファイル⇒その他…⇒オプション⇒リボンのユーザー設定⇒開発☑
 これで、リボン〔エクセルの上部に並んだ選択項目〕に「開発」が加わる。
 次に、エクセルにマクロの使用を許可する。
ファイル⇒その他⇒オプション⇒トラストセンター⇒トラストセンターの設定⇒マクロの設定
初期状態:「🔘警告して、VBAマクロを無効にする()」〔実際は「有効/無効を選択する」意味である〕
差し支えなければ:「🔘VBAマクロを有効にする」。〔自作あるいは信頼できる相手の作成したファイル以外は実行すべきではない〕
 リボンに表示された開発をクリックする。
開発⇒Visual Basic⇒挿入⇒標準モジュール
〔これで「Module1」が作られる。取り消す場合は、左側の「プロジェクトエクスプローラー」の「Module1」を右クリックして「Module1の開放」を選ぶ。〕
 これでエディターに到達する。文字の大きさを変えたいときはツール()をクリックする。
ツール⇒オプション⇒エディターの設定⇒〔フォント名・サイズ〕
 これでプログラムのコーディングができるところまで到達した。

【コードの入力とテスト】
 そして、エディターにコードを書いていく。 一行書くごとにコンパイルされるようで、その都度構文エラーなどの警告がでる。試しに、簡単なコードを書いてみる。
Function testf() As String
testf = "Hello! world"
End Function
 プログラムをテストするには、メニューのデバッグ()実行()を使うのが正式なやり方。 しかし、ワークシートに戻ってひとつのセルに「=test()」と書き込むと、直ちに実行されるのでその方が手っ取り早い。
 ただし、実行途中にエラーがあると、その時点でワークシートがフリーズするので注意が必要である。 コードを修正してエラーを解決した時点でワークシートも再開される。
 また、プログラムのコードを修正しても、それだけでは再計算は行われず、「その関数の書かれたセルをクリック⇒Enter」が必要である。
 "Function testf() As String" の「testf()」は、自分で命名した関数名で、そのままエクセルの組み込み関数と同等に使用される。 "As"は、返し値の型。「Integer:整数、Double:実数、String:文字列」だけ覚えて置けば十分である。 "as"にしたくなるが、予約語は強制的に一文字目が大文字にされる。
 Functionには、必ず返し値が必要。返し値の文法は「関数名=値」で、この値が関数値としてワークシートに返される。

【座標変換のマクロ化】
 大体様子が分かったので、試しに資料[61]で示した球面座標変換のためのフォームと同等の動作をする関数を作成した。参考として、そのコーディングを示す。  
sph1d(北緯1,東経1,北緯2,東経2,スイッチ)訂正済 sph1d(北緯1,東経1,偏角,中心角,スイッチ)
戻り値は、
 ●スイッチ=0のとき、偏角
 ●スイッチ=1のとき、中心角
戻り値は、
 ●スイッチ=0のとき、北緯2
 ●スイッチ=1のとき、東経2
Option Explicit
Dim pi As Double
Function sph1d(n1 As Double, e1 As Double, n2 As Double, e2 As Double, sw As Integer) As Double
Dim th1 As Double, fa1 As Double, th2 As Double, fa2 As Double, rslt(2) As Double
Dim s1 As Double
pi = 4 * Atn(1)
th1 = rad(90 - n1)
fa1 = rad(e1)
th2 = rad(90 - n2)
fa2 = rad(e2)
Call dandc(th1, fa1, th2, fa2, rslt)
If sw = 0 Then s1 = deg(rslt(0)) Else s1 = 90 - deg(rslt(1))
sph1d = s1
End Function
Function rad(d As Double) As Double
rad = d * pi / 180
End Function
Function deg(r As Double) As Double
deg = r * 180 / pi
End Function
Sub dandc(t1 As Double, f1 As Double, t2 As Double, f2 As Double, rs() As Double)
Dim xyz(3) As Double, xyz2(3) As Double
Dim mx(3, 3) As Double, mx1(3) As Double, mx2(3) As Double
Dim t9 As Double, l1 As Double, z2 As Double, y2 As Double
Dim hk As Double, ck As Double
Call cac(t1, f1, xyz)
Call cac(t2, f2, xyz2)
mx(0, 0) = Cos(f1)
mx(1, 0) = Sin(f1)
mx(2, 0) = 0
mx(0, 1) = -Sin(f1)
mx(1, 1) = Cos(f1)
mx(2, 1) = 0
mx(0, 2) = 0
mx(1, 2) = 0
mx(2, 2) = 1
Call mulmat(mx, xyz, mx1)
Call mulmat(mx, xyz2, mx2)
t9 = t1 - pi / 2
mx(0, 0) = Cos(t9)
mx(1, 0) = 0
mx(2, 0) = -Sin(t9)
mx(0, 1) = 0
mx(1, 1) = 1
mx(2, 1) = 0
mx(0, 2) = Sin(t9)
mx(1, 2) = 0
mx(2, 2) = Cos(t9)
Call mulmat2(mx, mx1)
Call mulmat2(mx, mx2)
z2 = mx2(2)
y2 = mx2(1)
l1 = -Atn(mx2(1) / mx2(2))
t9 = t1 - pi / 2
mx(0, 0) = 1
mx(1, 0) = 0
mx(2, 0) = 0
mx(0, 1) = 0
mx(1, 1) = Cos(l1)
mx(2, 1) = Sin(l1)
mx(0, 2) = 0
mx(1, 2) = -Sin(l1)
mx(2, 2) = Cos(l1)
Call mulmat2(mx, mx1)
Call mulmat2(mx, mx2)
hk = WorksheetFunction.Atan2(z2, y2)
ck = WorksheetFunction.Acos(mx2(2)) * Sgn(mx2(0))
rs(0) = hk
rs(1) = ck
End Sub
Sub cac(th As Double, fa As Double, rs() As Double)
rs(0) = Sin(th) * Cos(fa)
rs(1) = Sin(th) * Sin(fa)
rs(2) = Cos(th)
End Sub
Sub mulmat(m1() As Double, m2() As Double, r() As Double)
Dim i As Integer
For i = 0 To 2
r(i) = m1(0, i) * m2(0) + m1(1, i) * m2(1) + m1(2, i) * m2(2)
Next
End Sub
Sub mulmat2(m1() As Double, m2() As Double)
Dim i As Integer, t(3) As Double
For i = 0 To 2
t(i) = m2(i)
Next
Call mulmat(m1, t, m2)
End Sub
Option Explicit
Dim pi As Double
Function sph2d(n1 As Double, e1 As Double, h1 As Double, c1 As Double, sw As Integer) As Double
Dim th1 As Double, fa1 As Double, da As Double, ca As Double
Dim rslt(2) As Double, s1 As Double
pi = WorksheetFunction.pi()
th1 = rad(90 - n1)
fa1 = rad(e1)
da = rad(h1)
ca = rad(c1)
Call ne2(th1, fa1, da, ca, rslt)
If sw = 0 Then s1 = 90 - deg(rslt(0)) Else s1 = deg(rslt(1))
sph2d = s1
End Function
Sub ne2(t1 As Double, f1 As Double, hk As Double, ck As Double, rs() As Double)
Dim xyz(3) As Double, xyz2(3) As Double
Dim mx(3, 3) As Double, mx1(3) As Double, mx2(3) As Double
Dim t9 As Double, f9 As Double, t2 As Double, f2 As Double, r1 As Double
xyz(0) = 1
xyz(1) = 0
xyz(2) = 0
xyz2(0) = Cos(ck)
xyz2(1) = 0
xyz2(2) = Sin(ck)
mx(0, 0) = 1
mx(1, 0) = 0
mx(2, 0) = 0
mx(0, 1) = 0
mx(1, 1) = Cos(hk)
mx(2, 1) = Sin(hk)
mx(0, 2) = 0
mx(1, 2) = -Sin(hk)
mx(2, 2) = Cos(hk)
Call mulmat(mx, xyz, mx1)
Call mulmat(mx, xyz2, mx2)
t9 = pi / 2 - t1
mx(0, 0) = Cos(t9)
mx(1, 0) = 0
mx(2, 0) = -Sin(t9)
mx(0, 1) = 0
mx(1, 1) = 1
mx(2, 1) = 0
mx(0, 2) = Sin(t9)
mx(1, 2) = 0
mx(2, 2) = Cos(t9)
Call mulmat2(mx, mx1)
Call mulmat2(mx, mx2)
f9 = -f1
mx(0, 0) = Cos(f9)
mx(1, 0) = Sin(f9)
mx(2, 0) = 0
mx(0, 1) = -Sin(f9)
mx(1, 1) = Cos(f9)
mx(2, 1) = 0
mx(0, 2) = 0
mx(1, 2) = 0
mx(2, 2) = 1
Call mulmat2(mx, mx1)
Call mulmat2(mx, mx2)
r1 = Sqr(mx2(0) ^ 2 + mx2(1) ^ 2 + mx2(2) ^ 2)
t2 = WorksheetFunction.Acos(mx2(2) / r1)
f2 = Sgn(mx2(1)) * WorksheetFunction.Acos(mx2(0) / Sqr(mx2(0) ^ 2 + mx2(1) ^ 2))
rs(0) = t2
rs(1) = f2
End Sub
Sub cac(th As Double, fa As Double, rs() As Double)
rs(0) = Sin(th) * Cos(fa)
rs(1) = Sin(th) * Sin(fa)
rs(2) = Cos(th)
End Sub
Sub mulmat(m1() As Double, m2() As Double, r() As Double)
Dim i As Integer
For i = 0 To 2
r(i) = m1(0, i) * m2(0) + m1(1, i) * m2(1) + m1(2, i) * m2(2)
Next
End Sub
Sub mulmat2(m1() As Double, m2() As Double)
Dim i As Integer, t(3) As Double
For i = 0 To 2
t(i) = m2(i)
Next
Call mulmat(m1, t, m2)
End Sub
 "Option Explicit"は、変数を明示的に宣言すること〔Dim〕を要求する。 このオプションを使わなければ宣言を要さず、変数が最初に出てきたときに自動的に内部登録されるが、少し複雑なプログラムになると見つけにくいバグが必ずと言ってよいよど発生し、大惨事となる。
 FunctionSubは昔はgosubによるジャンプ先の拡張。Functionは値を返すサブプログラムで、「変数=関数名(引数,…)」の構文によって呼び出す。Subは値を返さず、呼び出し方は「Call サブプログラム名(引数,…)」とする。 なお、C言語ではすべて関数と称し、Subにあたるものはvoⅰd型の関数という。
 ここでは、行列積のプロシージャ「mulmat」をSubとして作っている。値を得るのが目的なのだがFunctionを使わないのは、関数は一つの値しか返せないと思い込んでいたからである。 ところが、VBAでは配列を返し値にできることが分かった。既にマクロが出来上がっていたから後の祭りであったが、実際には見た目がややよくなるだけで、実質的なコーディングの手間はあまり変わらない。 それよりも、配列の初期値を設定するときに、要素1個ごとにLet文を用いるしか方法がないのは残念である。その点、Cは宣言時に列挙できる。
 VBAの組み込み関数はまことに貧弱で、arcsinarccosなどを欠く。π〔円周率〕さえも実装されず、4×Atn(1)で代用できるという解説があったので最初のマクロにはそれを使った。 その後、"WorksheetFunction"によって、ワークシート関数が使えることが分かり、2つ目のマクロには"WorksheetFunction.pi()"を用いた。 πは本来定数なので、piをグローバル変数として宣言し、メインFunctionの冒頭で値を得て代入した。なお、ワークシート関数のsqrtatansignが、VBAではSqrAtnSgnとなっているなど、関数名の不一致がある。
 さて、ここで作ったマクロには、返し値が本来2つある。VBAにはセルを指定して書き込む機能があるというので、隣のセルに並べて書き出そうとして失敗した。 それは、ワークシートの「=関数()」の形では使えない機能だったからである。「開発」で開いたVBAプロジェクト内で「実行」するときのみ有効な機能である。 具体的には、「レンジ変数.Value=○○」という代入文の入ったマクロは、ワークシートではエラーとなる。 ワークシート関数MMULTのように結果を複数のセルに書き出す例はある。 結局、サイトに上げられた代入文「セル.Value=」を用いた実例は、カレンダー作りのような趣味的なものに限られている。
 このような事情で、今回の球面座標変換マクロでは、内部的には二つの値を計算しておいて、引数に追加したスイッチによってどちら一方を返すようにした。内部の計算量は2倍になるが、現在のPCの演算速度なら全く問題にならない。 余談になるが、整数除算も商と剰余をまとめて2つのセルに返すようにしたらどうだろうか。これで楽になる場面は多いと思われる。
【付記】2022.8.16
 その後、複数セルに同時に値を返す方法が見つかった。
 それは極めて単純で、関数の返し値を配列型にするだけでよい。右にそのサンプルを示す。 なお、縦並びのセルに返す時は、二次元配列(0,i)を用いる。さらに(i,j)とすれば(m×n)行列も可能である。 サンプル2は、「余談」で述べた商と剰余を同時に返す除算の例である。
 よく調べないまま、「VBAでの禁止はユーザーに対して冷淡過ぎる。」とまで書いてしまったことはまことに失礼で、 関係の皆様には深くお詫び申し上げる。
 上記のsph1d()関数の場合は、引数から「sw As Integer」を取り除き、「Dim s1 As Double」を「Dim s1(1) As Double」とし、 「If sw=0 …… sph1d=s1」を「s1(0)=deg(rslt(0))」改行「s1(1)=90-deg(rslt(1))」改行「sph1d=s1」とすれば両方の値が返る。
サンプル1サンプル2(剰余付き除算)
Option Explicit
Function test10()
Dim st(2) As String
st(0) = "AAA"
st(1) = "BBB"
st(2) = "CCC"
test10 = st
End Function
Option Explicit
Function divx(a As Double, b As Double)
Dim d1(1) As Double
d1(0) = Int(a / b)
d1(1) = a - d1(0) * b
divx = d1
End Function


まとめ
 結果的には、予めエクセルのワークシート上に計算手順を組み立てて動作確認をしたものを、マクロに移植した。 この手順は、なかなか効率がよかった。ワークシートで試した時と同じテストデータを用いて、結果が一致すればまずOKと見てよい。
 VBAによるマクロ作りという未知の世界に踏み込んでまだ3日目であるが、随分いろいろなことが分かった。 新しい技術を身に着けるには、必要最小限のことを使ってとにかく実用になるものを作って手応えを得て、そこから順次多様な方法に広げていくのがよい。
 VBAの仕様は現代のレベルでは見劣りがする。せっかくエクセルと結びついているのだから、セル範囲を指定すれば一気に初期値付きの配列宣言文のコードが出来上がる程度の機能はあってもよいだろう。 ただし、やろうと思えば自分で「"関数名("、n、","、m",")="、セル」を連結するフォームを作っておき、セルに中身のデータを並べ、結果をVBAエディターにコピペすれば比較的タイプミスを防ぐことができる。 ウェブページで大きな<table>をつくる際、エクセルにデータを並べ、<tr><td>を挟んでセルの値を連結する方法をしばしば使っている。それと同じである。
 さて、VBAによるマクロには、悪意のあるコードを容易に潜ませることができるので、その点はかなり危険である。利用者が広まればそれだけ危険が増すから、下手に仕様を発展させて注目を浴びることを避けているのかも知れない。

 訂正:sph1dの下から22行目。「* Sgn(mx2(0))」を付加。同じく下から33行目「mx(1, 0) = 0」にする。(2022.06.21)


2022.07.08(fri) [63] 日食のモデル~エミュレート 
図1
図2
 天球上の月の公転経路を白道といい、白道を含む面を白道面という。白道面は黄道面から5°~5.3°傾いていて、平均値は5.13°とされている。
 黄道面白道面が交わってできる直線上で太陽-月-地球の順に並ぶときに日食が起こる。
 幾何学では面の厚さは0であるから、地球上でただ一点で瞬間的に起こるだけだが、実際には皆既日食点はラインを描く。 皆既日食とは月の影が地球上に落ちる現象であり、幾何学的な面としての黄道面からは多少ずれてもよい。
 太陽光はあらゆる方向に放射され、1億5000万km離れた地球に届くときには、平行光線になっている()。 従って、地球上のすべての地点について、「黄道面」と言い得る面が存在し、すべて真の黄道面に平行である。 こうして月はそれぞれの面を横切りながら影を落としていくわけだから、 皆既日食ラインは結局白道そのものの影である()。

【白道傾斜角】
《昇交点と降交点》
 白道面黄道面から平均5.1°傾いており、白道面と黄道面が交わってできる直線上に太陽があるときに日食が起こる。 図2では、白道面が黄道面から北に離れていく方向に月が進んでおり、このときの黄道と白道の交点を昇交点という。 はこの後半周して再び交点に達し、こちらは降交点という。太陽が降交点側にあるときにも日食が起こる。
 次回の新月のときには、昇交点を通過してから既に約2日が過ぎ、基本的に日食は起こらない。これは地球が公転しているために、次の朔の位置関係になるには月は1回よりも余分に公転しなければならないからである。 白道面の傾きの向きは18.61年かけて公転方向とは逆の方向で一回転するが、1か月ではほとんど変わらない。
《1か月後に日食を繰り返す例》
 しかし、時に1か月後に再び日食が起こる。 「端で日食となった1朔望月後,他の端で再び日食が起こる場合がある」 (国立天文台/日食の周期)という。
 実例として、2000年7月1日と同月31日の場合を見る NASA Eclipse/1991。。 1日19:32:32、南極大陸近接の南太平洋で0.477、31日02:13:07、グリーンランドで0.603。 間隔は29日7時間。
図3
 月が地球に影を落とす現象が継続する時間は、図3によって考察することができる。 地球の直径は1.27万km月の直径は3480kmなので、太陽から地球を見たときの視直径は1.90°〔月の視直径5.2°×12000÷3700〕である。 地球上では月の直径の2倍の範囲で部分日食が観察されるので、地球に影を落とす月の範囲は、視角で表して最大27.2°となる。
 月の公転の角速度は、平均13.2°/日〔360°÷27.3日〕なので、次の朔日には13.2°/日×2.2日=29.0°となり、 27.2°を越えるから、平均的には1か月後の日食は起こらない。ただし、月の公転軌道は楕円なので、遠地点では11.8°/日に落ちる〔資料[59]《公転軌道が楕円であることによる影響》〕。 この場合月の視直径も5.0°になるのがマイナス要素だが、影を地球に落とす範囲=27.0°、次の朔日の位置は+26.0°でぎりぎり可能である。
 ただ、これでは条件が厳しすぎるので、さらに綿密な計算を要すると見られる。
《地球全体の日食継続時間》
 前項から、月が地球に影を落とす継続時間は2日程度あるから、皆既日食・金環食においては日の出から日没まで地球上のどこかで観測されると考えてよい。

【皆既点経路作成の手順】
 実際には金環食の場合もあるが、ここではその場合も含めて日食の中心地点を「皆既点」と表現する。 ここでは太陽と月の視直径は完全に等しいと仮定し、地球は実際は楕円体に近いが、ここでは半径6366kmの球とする。この場合皆既点は幾何学的な点となる。
 以上の条件下で、皆既点経路を次の手順で求めることができる。
 白道面は地球をスライスして、その断面は円となる。この円が赤道面と平行で、かつ赤道上に太陽直下点を合わせた座標系Aを設定する。 このときのスライス円の緯度は(90°ー高度)とに当たる。 皆既点ラインはスライス円の円周の半分となる。
 座標系Aを白道面を5.1°傾けて変換し、これを座標系Bとする。
 座標系B黄道面の傾き23.4°だけ回転させ、これを座標系Cとする。
 座標系Cに年周運動による地軸の向き(ここでは季節量と呼ぶ)を加味したものを、座標系Dとする。
 地球の自転を反映させるために、座標系Dの経度を時間に比例させて動かしたものを、座標系Eとする。 これが皆既点ラインの緯度経度となる。

図4
【白道のスライス円】
《皆既点の移動の速さ》
 図4は、白道面と赤道面が平行としたときの座標系Aを表す。 太陽光は、遠距離だから平行光線になっている。
 月は一定速度で進み、白道による地球のスライス円に沿って影を落とす。 影が移動するスピードは、に示したように、両端で大きく、中央で小さい。
 ある時刻における皆既点の位置を決定するためには、スライス円の中心角と月の位置との関係を数式化する必要がある。
 今、月の公転の角速度ωとすると、時間tの間に進む角θ=ωtである。その間に皆既点がスライス円を移動した中心角βは、 とすると関係は単純で、
 Rsin(θ)=rsin(β) 〔r:スライス円の半径。R:月の公転半径〕
 となる(図4)。
 ところが、地球は公転しているので、月〔及びスライス円上の皆既点〕が移動している間に、太陽光の向きが刻々変わっていくという問題がある()。
 月の公転の角速度は、360°÷(27.3〔日〕×24時間)=0.55°/時。これが地球から見たときの月の位置の変化を、視角で表したものである。
 地球の公転は、太陽が月の背後から照射する平行光の角度の変化として表現される。 太陽光の向きの変化は地球の公転の角速度に等しく、360°÷(365.24〔日〕×24時間)=0.04°/時で、月の見かけの位置変化よりは小さいが、無視できない。 このように、白道スライス円の中心角の変化には、月の公転の角速度と太陽光の向きの変化量が複合的に作用する。
 そこで、の、月の位置を起点として、 月の移動θ、およびその間の太陽光の角度の変化αと、スライス円の中心角の変化βとの関係を幾何学的に求める。
図5
 図5で、[式1]は、h1αθで表したもの。 [式2]は、h2βαで表したもの。
 これらの2式から連立方程式の解法の要領でを消去すると、αβθの間の関係式が得られる([式3])。
 これをβについて解く。まずsin(β)=xとすると、sin²(β)+cos²(β)=1の関係から、cos(β)=√(1-x²)となる。 左辺を(1-x²)の項のみにして、両辺を二乗するとxについての二次方程式となる([式4])。
 根の公式によって得られた答は[式5]で、かなり煩雑である。 ただ、日食の数時間程度ならαはかなり0に近い〔0.0007tラジアン〕ので、tan(α)=sin(α)=α〔ラジアン〕で、 これを用いるのなら、cos(α)=sin(α)/tan(α)=1でよい。
図6
 二次方程式だから二つの解「p±√」が出てくるが、これはを二乗したときに必要十分条件の関係が失われたことを反映したものである。
 [式1][式2]に戻ってθαに適当な値を入れて検算してみると、「」が真の解であることが分かる(図6)。 この検算からさらに、tan(α)=αなどとしたことによる誤差は5桁目以降に現れていることが分かる。 a=約500万kmは地球の公転半径1.5億kmとは無関係なので、作図のみで現れる値らしい。
 基準点からの経過時間をとすれば、θ=ωtα=φt〔φは地球の公転の角速度〕で、によってβを得ることができる。
 ややこしい計算になったが、これでともかくは時間高度を与えればスライス円上の皆既点の中心角を得ることができる。

図7
図8
【座標変換】
《高度90°のスライス円》
 高度90°、すなわち緯度0°のときは、スライス円は座標系Aの赤道と一致する。 図7は、そのときの中心角θの変化を計算したもの。
 図8は、一定の角速度で進む月の位置〔視角〕と、 スライス円上の点の中心角βとの関係。端に近づくとβの変化は急に大きくなる。 は、βが表すスライス円上の点を図示したもの。 横軸はcos(β)、縦軸はsin(β)。
《白道傾斜》
 スライス円の高度60°〔緯度30°〕、太陽直下点を東経90°とする。 この場合、白道傾斜に伴う回転軸は90°~270°ラインとなる(図8)。 そのため、マクロ関数sph1d()における基準点のN1=0°E1=0°とし、sph2d()に与える弧開始点をN1=5.1°E1=0°とする。
 その結果は図9で、これが座標系Bである。 N1=5.1°のときは降交点ー5.1°のときは昇交点となる。
《黄道傾斜》
 単純な例として、夏至に起こる日食を考える。 この場合、図8の東経0°~180°ラインを軸として太陽に向かう方を下方に回転させることになる。 そのためには、sph1d()の基準点をN1=0E1=90°として偏角と弧の中心角を求め、sph2d()に弧開始点として、N1=23.4°E1=90°を与える。
 これが座標系Cである。
《自転量の設定》
 次に、季節による自転軸に向きを加える(座標系D)が、これは次項で述べる。
 さらに、地球は自転しているので、経度は刻々と変化する。 そのために、(座標系D)で得た緯度から経過した時間×角速度を引く必要がある。 自転周期〔1恒星日〕は23.93時間なので、角速度は15.04°/時となる。
 以上から、図9の結果が得られる。
 この場合日食の中心時刻においては、太陽は南中し太陽は黄道面と白道面の交線方向になるので白道傾斜の影響はない。 そのときの皆既点の緯度は、23.4°〔黄道傾斜〕30°〔90°-高度〕53.4°になる。
図9
《自転軸の向き》
図10
 日食=白道面と黄道面の交線が太陽を向くタイミングと、季節との間には直接的な関係はない。 つまり、日食のときの太陽直下点と、地軸の向きとの組み合わせは様々である。
 座標変換マクロにおいては、sph1d()の基準点E1にある値を設定することによって地軸の傾きの向きを表現することができる。 その値は、冬至:270°春分:180°夏至:90°秋分:0°となっている。 このE1を、ここでは季節値と呼ぶ。 図10は、季節ごとの地軸の向きを説明する模式図、 は、sph1d()の基準点E1と地軸の向きとの関係を示す。プロットした点に添えた値がE1である。 具体的には、sph1d(0,季節値,0,90,スイッチ)〔スイッチ=0:偏角、1:弧長〕で偏角と弧長を得て、 sph2d(23.4,90,偏角,弧長,スイッチ)〔スイッチ=0:N2、1:E2〕によって得られたN2が太陽直下点の緯度である。
 E2は、夏至の南中経度=90°を基準としたときの南中点の経度を意味する。実際の経度は、地球が1回自転する間にすべての値をとる。
 興味深いのは、季節値45のときの太陽最高高度点がN16.31°E137.46で、E135°から少し東にずれていることである。 これは、太陽の南中時刻と、最高高度点の時刻が少しずれていることを意味する。具体的には南中より約9分50秒早く、そのときの高度は73.69°である。
 日食のスライス円に対しては、この季節値を含めた操作(座標系D)に自転量を加えて(座標系E)最終的な変換が完了する。
図11

《適用例》
図12
 NASA Eclipse /Maps of…などでメトリカル図法による日食地図を参照すると、 この計算モデルは大体の状況を表しているように思われる。図11で、いくつかの代表的な場合について考察する。
 の「季節値160」は、春分から約20日後にあたる。 春分の地軸(図10)の向きから考えると、降交点の場合は白道面の傾きが黄道面傾斜の効果を減らし、 昇交点では逆に増やす(図12)。 よって、皆既点の移動経路の南北方向の変化は、昇交点の方が降交点より大きい。 の両者の皆既点の経路に、それは表れている。
 の「季節値36」は、夏至から秋分の間の中間点よりやや秋分寄りである。 秋分では図12と地軸の向きが逆になり、南北方向の変化は降交点の方が昇交点より大きい。 降交点では短時間に大きな経度を進む部分があるが、これは北極点の近辺では経線の間隔が極めて狭いからである。
 図11ではA座標の緯度80°で、皆既点地球の北の端に近づいている。 皆既点ができる時間は約39分と短くなっているが、これはスライス円が小さくなったことによる。
 ではA座標の緯度89°で皆既点の範囲は地球をかすめる程度である。 その皆既点は北極点には及ばず、北緯66.6°±5.1°の範囲となる。これは地軸が23.4°傾いているからである。 夏至〔季節値90〕と冬至〔同270〕では白道面傾斜の影響を受けず、北緯66.6°が中心である。 降交点の場合、春分〔同180〕では北緯71.7°、秋分〔同0〕では北緯61.5°が中心となっている。

まとめ
 皆既点の経路は、平面と球が交わったスライス円である。そのスライス面と球の中心との間の距離が、皆既点経路をを決める第一の条件である。
 第二の条件は、降交点/昇交点のどちからということである。第三の条件は、季節によって変わる地軸の向きである。 白道傾斜と、任意の軸の向きに応じた黄道傾斜は、資料[61][62]で確立した計算方法によって球面座標を変換して北緯東経を求めることができる。 原理は単純だから、入力するときの勘違い等がなければ概ね皆既点のコースをエミュレートできるはずである。
 ただ、そこに時間の経過を加える段階で、思わぬ複雑さに遭遇した。計算式自体は検算結果を見ても正しいと思われるが、前提となる考え方に欠陥があることを恐れる。 今後誤りが判明したら、その時点で報告するつもりである。



2022.07.14(thu) [64] 日食のモデル~632年1月27日の日食 
図1
NASA Eclipse Web Site
 図1は、NASA Eclipse Web Site/0601 to 0700/掲載の632年1月27日の日蝕〔以後、NASA図と呼ぶ〕である。 それによるとこの日の日食はAnnular〔金環食〕で、サロス番号99、Altitude〔太陽高度〕47°となっている。 太陽の高度47°は、〔座標A〕北緯43°におけるスライス円に相当する。 金環食になるのは、月が地球から遠い時で、近いときは皆既日食である。 それは、月の公転軌道が楕円であることによる。NASA図の判断は、恐らくそのときの月の公転軌道を計算した結果である。 なお、ここでは金環食の場合も含めてその中心点を皆既日食点と表記する。
 この日の日食は舒明天皇四年正月朔日に倭で観測されたが、誤って八年正月朔日に書かれたと考えられているものである。
 ここでは、もし舒明四年〔632〕があったとすれば、どのようなものであったかを知ろうと試みる。 そのために、これまでに得た手法を用いてこの日の日食をエミュレートする。
 資料[63]で見たように、皆既ラインを求めようとすればパラメータとして高度季節値昇交点/降交点の区別が必要である。
 このうち、季節値については1月27日は冬至から概ね38日後なので、季節量は270から180日に向かって、270-38÷91×90=233となる。 時刻値は、NASA図の中央時刻〔高度が最も高い〕のインド北西部沿岸に合わせると、223となる。
 図2は、それらのデータを用いて資料[63]モデルを適用して計算した過程を示す。 スライス円が太陽に面する端から端まで、所要時間は約2時間44分である。その中央で太陽高度=月の高度が最も高く、この時刻を0hとする。
 こうして各時刻ごとに得られた座標を、メトリカル図法に変換して地図に重ねたのが図3である。インド洋中央のは、0hにおける太陽直下点である。 太陽直下点とは、太陽高度が90°となる点のことである。 この計算は降交点昇交点について行ったが、 このうち昇交点の経路は一見してNASA図とかなり一致するので、このモデルが632年1月の日食を表すものと仮定して計算を進める。
図2
図4
図3
 図4は、図2に行った計算の結果をまとめたものである。 最上行と最下行は、スライス円上の皆既点の両端にあたり、中心角はほぼ90°である。 この中心角とは、地球の中心から太陽直下点及び地球を結ぶ直線が作る角であるから、その最大値が90°であるのは当然である。
 その計算式の説明は資料[63]で示したが、[式6]において、sin-1()関数の引数が1を超える場合はエラーとなるので、絶対に90°を越えることが起こらない式となっている。
 その限界位置に対応する時刻を試しに細かく計算したが、月の公転の平均角速度に基づく値であるから実際にはこの細かさに意味はない。 あくまでも、一つの試算である。月の軌道に関する正確なデータによって、この日の真の角速度が得られれば、表2ωを書き換えるだけで自動的に全体を再計算できる仕組みになったいる。
 現時点のモデルによる各時刻の皆既点をプロットしたのが、図3である。メルカトル図法の地図への投影については、資料[60]で説明した通りである。 なお、図3には、参考のためにメルカトル図法によるビットマップを重ねるために使用する目印を残した。

【各時刻における食分の分布】
《食分分布図の作成》
図5
 図5は、この日食の中央時刻〔前述〕における食分の推定分布図である。 この太陽直下点を赤道に置いた座標系Aによるモデルは、資料[60]に示したものである。
 ここでは、太陽直下点の位置を一般化したときの食分の分布を、座標変換によって求めた。
 図6はその手順を説明したもので、この赤道上に太陽直下点を置く特別な座標系をP座標と呼び、 それに対して通常の座標系をR座標と呼ぶことにする。
 太陽直下点-皆既点をsph1d()関数を用いてP座標系に変換し、偏角T中心角〔弧長〕を求めておく。
 P座標系において、皆既点から食分を表す同心円上のいくつかの点についてP座標系上の座標(G,H)を求める。
 それぞれの(G,H)について、sph1d()を用いて弧長Lと偏角∠Kを求める。
 弧長L偏角は(P点への偏角∠T)+(P座標における(G,H)点への偏角∠K)を用いて、R座標系における太陽直下点の座標を起点として、 sph2d()を用いて、R座標系における北緯・東経(A,B)を求める。
図6
図7
図8
 等食分線は、日没によって断たれる。 図5図7図10Ⅰ~Ⅶには、日没ラインには日の出ラインも〕を記入している。
 日没ラインは、地球を太陽に当たる側と当たらない側に二分する。もし、太陽直下点が北緯0°東経90°のときは、 日没ライン(また日の出ライン)は、東経180°線、及び東経0°線である。そのラインを緯度経度で表せば、北極点(N=90°)からN80°E180°、N70°E180°…と繋ぎ、南極点(N=ー90°)を経て、更にN80°E0°、N70°E0°… を繋いで北極点に戻る。
この各点を、黄道傾斜と季節値によって座標変換することによって、任意の時期の日没ラインが得られる(図8)。
 図7には、この方法で求めた日没ラインを重ねた。このラインは、食分分布図を求める計算において計算不可能になる限界と一致する。
 これを見ると、スライス円への投影〔皆既日食ライン〕が終了する時刻において、畿内では日没が迫っている。

【外挿】
 畿内での日食を最後まで押さえようとすると、皆既日食点が既に消滅した後についても部分日食についての食分分布図を求める必要がある。
 ところが、ここまでの計算モデルは皆既日食ラインが存在する部分にしか適用できないので、新たなモデルが必要となる。 しかし、それには再び初めからの作業を要するので、ここでは便宜的にパラメータを外挿することにする。
図9
 スライス円から外れた部分を計算するためには、結局投影軸〔資料[60]図3のOA〕の長さと座標Cにおける偏角が分かればよい。その際、投影軸の長さは地球の半径を越えて考えることができる。 そこで、この2つの値をこれまで得られた値から外挿することを考えた。
《投影軸長》
 まず、投影軸長の回帰式を求める。 投影軸長の物理的な意味を考えてみると、図9のように投影面に投影された月の影と地球の中心との距離である。 月は一定速度で通過するから、投影軸の長さはvt²+p²で表されると考えてよい。
 そこで、これまでに得られた値によってこの形の回帰式を求め、この式を使って外挿分を計算する。
 この回帰式による計算を、これまでに得た値と比較すると、小数点の後に9が5個並ぶ高い一致が得られる。
 この一致度を見ると、この式には物理的な意味がありそうである。 そこで、この式の意味を検討すると図9の図が想定される。図の投影面は、太陽直下点に差し込む光に垂直かつ地球の中心を通る面である。
 白道の影が投影面に投射され、投影面の円(地球の外周)に交わる部分がスライス円の部分である。 投影軸長はピタゴラスの定理による。また、=地球の直径〔6636km〕×cos(座標系Aにおける緯度〔47°〕)。 =√11631102.9=3410.44…は、リアルな月の公転速度〔単位km/h〕に対応する。但し、実際の値3682km/h〔=384000×2π÷27.3÷24〕より小さいのは、 地球の公転による太陽光の向きの変化が、皆既点の移動を月の移動速度よりも小さくする要素として盛り込んだためだと考えられる。
《偏角》
 一方偏角については、スライス円からはみ出たときの考え方の糸口がしばらく見つからず、一時はやむを得ずマクローレン展開による近似も考えた。
 ところが、よくよく見ると前記の投影軸長にはピタゴラスの定理が絡んでいて、この値は直角三角形の斜辺である。そこで、試しに直角を挟む辺との間の角を求めて偏角との関係をグラフにしてみたところ、完全な直線になった。 その考えを進めて得られた式が、である。「×180/π」がついているのは、逆三角関数の値の単位はラジアンが一般的だと考えられるからである。
 気になった点は、に重なっている時点でが0にならないところである。 しかし、これは地軸の傾きを反映したものと理解すればよいだろう。
 この偏角は、太陽直下点皆既日食点の、それぞれの緯度経度からsph1d()関数によって計算したものだが、 結局は投影軸と、垂線がつくる角であった。何か、遠回りしたような気がする。
 こうしてともかくも、地上の皆既点が消滅した後でも投影軸長偏角について、物理的に意味をもつ計算を行うことができるようになった。
 なお、マクローレン展開の結果は、h=1.53、1.75、2について、三次式ではそれぞれ30.0、31.5、30.7という惨憺たる結果であった。 正の部分だけを用いた二次式では、それぞれ30.4、33.7、36.2 でこの方がまだましであった。一般的にマクローレン展開による近似は、外挿には向かないようである。 ただ、その計算過程で三元一次連立法的式を解くことが必要となり、その場合エクセルの行列式関数:MDETERM(行列範囲)を使うとかなり楽にできることが解り、過程としては有意義であった。

【明日香と対馬での食分】
 以上の手法を用いて、皆既点が消滅する前後の、明日香対馬で見たであろう日食の食分の変化を見る。 ただし、根本的には考えられる一つの場合である。 皆既点が消滅した後も、明日香と対馬では部分日食が継続する。それぞれが日没になるまでの食分を求めた(図10)。
 この計算モデルによると、皆既点での日没はM〔日食中央時刻〕+1時間21分55秒である(図7)。
 それから約10分後のM+1時間31分48秒に畿内で日没する(図10)。 さらに約28分後のM+2時に対馬で日没する(図10)。いずれも、部分日食のままでの日没である。
図10
 それぞれの食分の変化を、図11に示した。
 前述したように、このM±1時間21分55秒という日食時間は、月の公転の角速度の平均値0.55°/時図2の0.00958…はラジアン単位〕を用いており、このときは金環食であるから月は平均位置よりも遠く、従って実際の角速度はこれより小さい可能性がある。 資料[59]《公転軌道が楕円であることによる影響》で見たように、 角速度の最小値は0.49°/時である。大雑把に、日食継続時間は月の角速度に反比例すると考えると、 角速度0.49°/時のときは(0.55-0.04)/(0.49-0.04)=1.13倍となる〔-0.04は地球の公転による減殺分〕
 実際に角速度を90%の0.4945°/時で計算してみると、皆既点の消滅はM+1時間31分48秒で、ほぼ明日香の日没時刻となる。 この場合の食分の推定値のグラフも、図11に添えた。 NASA図が示す「金環食」が確かなら、この二つのケースの間であろうと考えられる。 このときの月の実際の軌道が分かれば、もう少し絞り込むことができる。今後、資料が得られた段階で改めて考察したい。
《明日香》
 舒明天皇の宮が置かれた明日香では、月の公転の角速度0.55°/時の場合、部分日食が始まるのは日没の30数分前である。食分は少しずつ大きくなり、日没の瞬間が最大で0.25となっている。 食分0.1程度で人々が気付き始めるとして、日没まで約25分である。日没前は見つけやすいとも言われるので、一定の人数が気付いたかも知れない。
 角速度が最低レベルの0.49°/時の場合、食分が0.1以上の時間は10分余り、最大値は0.17で観測される条件は更に厳しくなる。
《対馬》
 対馬でも、部分日食を維持したままで日没するが、部分日食の時間は1時間以上あり、 さらに食分の最大値は0.29~0.31に達しているので、こちらの方が顕著である。
 対馬は倭と半島を結ぶ重要な交通路である。海運に携われば天文の知識と観測能力に優れていたと考えられるので、 日食のような現象にはとても関心をもたれ、しっかり観察された可能性が高いように思われる。
図11

まとめ
 632年〔舒明天皇四年〕の日食が倭で観測されたかどうかは、書紀の記述の信憑性を探る上で比較的重要な問題である。 実際には対馬で観測され、その報告が中央に上がって記録された可能性も考えられる。 ただ、漠然としたままでは検討のしようがないので、この日の日食が実際にどのような経過を辿ったのかを是非詳しく知りたいところである。
 しかし、数多い日食からひとつを取り出して、特定の地点における食分の時間的経過を詳しく知ることができるようなサイトはなかなか見つからない。 大学や専門機関なら間違いなく専用システムがあるだろうが、それを使わせてもらうまでが大変そうである。
 そこで、自力でできる範囲でやってみようと思い立ち、いろいろ試してみた。その経過は、資料[59]から資料[64]にまで及ぶ。
 その結果、皆既点の経路及び時刻ごとの食分の分布図が作図できるようになり、実際の資料を参照するとうまくいっているように思える。 これで、あらゆる条件において、日食の基本的なモデルを作ることができそうである。
 こうして、当初の目的である明日香と対馬における食分の経過の推定図を、遂に得ることができた。ここまで来るのに、およそ二か月を要した。
 その理論については数学そのもので、随分勉強し直した。ソフト作りの面では球面座標変換のためにVBAでつくったマクロ関数は、絶大な威力を発揮した。 エクセルによるグラフの作り方も一定程度わかった。総じて、副産物として多くの多面的な技を身に着けることができたことが収穫である。



2022.07.22(fri) [65] 日食のモデル~637年4月1日 
 637年4月1日〔ユリウス暦〕の日食を見る。hosi.orgによると、この日は〈舒明九年〉三月乙酉朔丙戌〔二日〕にあたり、そこに「日蝕之」と記述される。
 NASA Eclipse Web Siteによると、この日の日蝕は皆既日食である。 ということは、月が地球に比較的近いときの日食である。どの程度近いかを推定するために、この前後の時期の皆既日食金環日食と比べてみる。

【皆既日食と金環食】
 NASA Eclipse Web Siteを見ると、626年から639年の期間に皆既日食と金環日食は22回ある。 その各日食について、626年1月1日を起点として通算日数を求め、月の公転周期〔1恒星月、約27.3日〕で割って剰余を求めれば軌道上の位置が求まる。 それは、今月の近点から27.3日後に再び近点となるはずだからである。
 しかし、話はそれほど単純ではない。それは、月の楕円軌道には近点移動が存在するからである。近点と遠点を結ぶ軸は少しずつ回転しており、これを近点移動という。 その回転の方向は月の公転方向と同じで、3232.605日〔約8.85年、約118.3か月〕で一回転する。 つまり、次に近点になるのは1恒星月に(27.32÷3232.605)日を加えた日数後となる。
 そこで、累積日数から近点移動の分を差し引いた上で、恒星月で割った剰余を求めれば、近点移動がない状態で一か月内の月の位置を表す数値が得られる。 図1のグラフは、その結果である。
図1
 ここで、x軸は626年1月1日を1としての累積日数、y軸は、 {(1-27.32/3232.605)*x}mod 27.32である。 エクセルでは、剰余演算の対象が小数に拡張されている。
 グラフにした結果を見ると、修正した各月の、2日頃から13日頃までが皆既食、それ以外が金環食となっている。 だから、2日~13日の中間点辺りが近点にあたるはずである。
 但し、このような古い時代の皆既食/金環食の実際の記録はほとんどないと思われる。実際には、現代のモデルによる計算が先にあり、そこで得られた月までの距離に基づいて皆既/金環を判別したと思われる。
《地球太陽間の距離》
図2
 この境目にもっとも近い値は皆既食の12.3日、金環食の13.7日で、区切りはかなり際どい。 実際にはこの境界は幾分変動し、時には逆転もあると考えられる。その理由は、地球の公転もまた楕円軌道だからである。つまり太陽の視直径も変動する。
 太陽についてそれぞれ近点遠点、平均距離について視直径を計算したのが図2である。 視直径〔ラジアン〕=天体の直径÷地球からの距離で、ここでは単位をに直した〔×180/π〕。「月の視直径/太陽の視直径」の値が1以上が皆既食、1未満が金環食である。
 これを見ると、その境界は太陽との距離によって多少異なるが、月への平均距離よりやや小さいところにある。
 資料[64]で見た632年1月27日の金環食は境界ギリギリで、平均距離384400kmに近いと思われる。 すると、明日香で日食を見ることができた時間は、月の角速度が平均に近い方であろう。
 637年4月1日の皆既食は近点に近く、したがって月の公転の角速度は平均値より大きい。ここでは、暫定値として平均値の1.1倍を用いた。 632年の日食の場合は日没ぎりぎりであるから、日食の見え方の推定に対して月の角速度は大きく影響するが、637年の日食の場合は日の出・日の入りが絡まないのでそれほどシビアな影響はない。

【637年4月1日の皆既食の諸元と経路】
《日食の諸元》
図4
図3
NASA eclipse/0601-0700より
 NASA eclipse/0601-0700によれば、637年4月1日の日食は図3〔以後、"NASA図"〕の通りである。 皆既日食で、高度は41°。 中央時刻における位置は一覧表では「51N158E」となっているが、図3では、それよりやや西のように見える。
 高度41°の場合、スライス円のA緯度北緯49°である。hosi.orgによると、ユリウス暦4月1日は、グレゴリオ暦の4月4日である。
《本サイトのモデルの適用》
 グレゴリオ暦の春分が3月21日とすると、この日食はそれから14日後にあたる。そこで季節値=180-14=166として、本サイトの日食モデルで計算する。 中央点をNASA eclipse Web Siteの示す51N158Eに合わせると、時刻値は256.5となる。 こうして描かれた経路では、降交点の方がNASA図にかなり近い(図4)。
 角速度の暫定値としては、標準値(0.594°/時)の10%増しの0.604°/時とした。これは、概ね月地球間距離が366000kmの場合に相当し、 近点距離の範囲とされる356000~370000kmに含まれる。図1では近点に近いから、当たらずとも遠からずであろう。

【食分分布図の推移】
 ここで、食分分布図の推移を見る(図5)。 高度最大点の時刻〔中央時刻〕を、M時0分とする。 食分曲線は、日の出ラインで断ち切られる。
《外挿》
 この日食では、皆既日食ラインが始まる前から、その南側地域で部分日食が始まっている。資料[64]で日没後の外挿に用いたのと同じ方法を、ここでは日の出前に適用する。 では、皆既ラインの延長よりもかなり南寄りに見える。これは食分曲線が日の出ライン近くでは日の出ラインに直角方向に大きく引き伸ばされることによる。 この時刻はMの約1時間55分前である〔以下、前述したように月公転の角速度が暫定値なので、実際の時刻はこれより前後する〕
 この時刻は、明日香においては日の出から約1時間20分後である。この瞬間に食分0のラインが及び、部分日食が始まる。 なお、沖縄南方に食分0.4のラインが見いだされるが、0.6のラインはまだ現れない。
《皆既日食ライン》
 は、皆既日食ラインの端である。の約49分後、の1時間6分前にあたる。
 で皆既点は黄海から日本海を通過する。 日本列島全体が食分0.8のラインの内側に入る。
図5
図6
図7
《中央点以後》
 は、日食の中央点。では、畿内は既に日食は終了している。まだ正午前である。 食分ラインが北に大きく膨らむのは、高緯度になり部分日食の範囲が広がる上に、メルカトル図法の特性により極端に広く表されるため。 図6は地球全体での食分分布および昼間の範囲を示す。 春分を過ぎているので、北極点は日照範囲に含まれ、部分日食の範囲に入っている。

【明日香での食分】
 明日香における食分の推移を見る。前述したように、から1時間55分前ごろに欠け始め、 図7のグラフによれば約2時間15分継続する。 の50分前には、食分がほぼ最大の0.90となっている。 そのときの皆既日食点の位置は、北緯37.4°東経130.0°で、明日香と結ぶ弧の中心角は5.53°、距離にして613kmである。

まとめ
 このように、637年4月1日の日食では明日香で食分0.9に及んだ可能性があり、極めて明瞭な日食として観測されたであろう。 従って、明日香の宮廷の正式な記録として残されたと思われる。
 これに比べると、632年1月27日の日食はやはり宮廷では気付かれなかったのではないだろうか。 後日対馬から伝えられたが、その記録は不完全なもので書紀を書くときに読み誤ったという経過が想像される。