ホルガ村に行く

`※この記事は映画「ミッドサマー」のネタバレを含みますので、未見の方はご注意ください`

# はじめに
　自然豊かなホルガ村、行ってみたいですよね。
　というわけで今日は、ホルガ村の位置を特定したいと思います。

# 手法　
　まずは劇中で提示された情報に基づいて、以下の二つの条件を仮定します：
**- ストックホルムからホルガ村まで車で４時間**
**- ホルガ村では白夜が９日間続く**

　１つ目の条件は、飛行機から降りてホルガ村に向かう車の中の会話から推測できます。
　２つ目の条件は、ホルガ村に到着したとき白夜になっていること、ならびに夏至祭が９日間続くことから推測できます。

　この２つの条件を認めると、「ホルガ村が地球上のどこに位置するか」は数学的問題として定式化できます：

![horga_intro_small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240908/12930709-c1b7-cdae-4350-2f9a7d998b32.png)

　１つ目の条件は**ストックホルムからの同心円**として描かれ、２つ目の条件は**白夜が９日間続く緯度の線**として描かれます。よって、**これら２つの線の交わる点**が、ホルガ村の位置の候補となります。

　ここで説明したのはあくまでも基本的なコンセプトです。車で４時間という距離は時速や道路の選び方によって変わります。白夜というのもダニーたちの到着した１日だけかもしれませんし、逆に９日以上続く可能性だってあります。現実的にはそれぞれの条件を少し緩め、線でなく太さを持たせた「帯」として考え、ふたつの帯が重なる領域をホルガ村の位置の推定区間とするべきでしょう。

　２つの条件について、もう少し具体的に吟味していきます。
## １つ目の条件：ストックホルムからホルガ村まで車で４時間
　１つ目の条件については、今回は道の選び方については無視して、直線経路を取ると仮定します。代わりに時速の方に幅を持たせて、複数の同心円を描き、その中間領域を推定された区間とします。たとえば時速50kmの同心円は、ストックホルムを中心とした50*4=200kmの同心円を描けばよいだけです。実際の地表は平面ではなく曲面なので、直線距離ではなく[**測地線**](https://ja.wikipedia.org/wiki/%E6%B8%AC%E5%9C%B0%E7%B7%9A)を計算する必要があって少し面倒ですが、Mathematicaでは地図上の同心円を描くGeoCircleという関数が最初から用意されています。今回は時速50~60kmとして、200～240km内の同心円の幅を推定区間としました。

## ２つ目の条件：ホルガ村では白夜が９日間続く
　２つ目の条件、白夜の日数と緯度を結びつけるには、ちょっとした計算が必要になります。まず、白夜とは季節的な現象のひとつです。そして、季節とは一年間の気候の移り変わりのことですが、これは主に日照時間（※）が変動していること、ひいては地球の地軸（自転軸）が公転面に対して垂直ではなくわずかに傾いていることに由来します。地軸が傾いていなかったら、季節も白夜も存在していません。

`（※）この記事では「日の出から日の入りまでの時間」のことを「日照時間」と呼んでいますが、これは正確に言うと気象学では「可照時間」と呼ばれるもので、本当は「日照計で測定し、一定量以上の日照が当たったことを確認できた時間」のことを「日照時間」と呼ぶそうです。地形や雲の影響があるため、本当の日照時間は可照時間より短くなります。`

![earth_large.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240908/7e34e4c3-ec6d-54e6-23b6-34f24d29e247.gif)
　真ん中のオレンジ色の球体が太陽、その周りを回っている球体が地球です（大きさ・距離・速度は見やすさのために適当に変えています）。この図では、地球が太陽の**上**にあるとき**北半球の春**、**左**にあるとき**北半球の夏**、**下**にあるとき**北半球の秋**、**右**にあるとき**北半球の冬**となっています。北半球の影の面積が、夏に狭くなり、冬に広くなる、という風に変動しているのがわかるかと思います。これが季節です。季節性＝日照時間の変動パターンは、緯度によって変わってきます。赤道では一年中日照時間は変わりません。一方、赤道より南、つまり南半球では北半球と季節性が逆のパターンになります。そのため、南半球にあるオーストラリアは12月が夏になり、サンタクロースがトナカイではなくサーフィンでやってくることになっています。

　日照時間の年内変動パターンを数式で表現しましょう。地球を完全な球体だと仮定して、２つの断面を見てみます。ひとつは北極星・地球・太陽の重心を結ぶことでできる断面で、もうひとつは、観測者のいる緯度で切った断面です（以下では北半球の夏について考えますが、他の場合でも大体同じです）。
![kakudo0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240908/03e49b6c-2c7a-721d-df76-63d73a26c629.png)
　北極星-地球-太陽平面（上の断面）で見ると、地軸を含みつつ、昼半球と夜半球をちょうど半分含んだ断面が見れます。地軸と昼夜境界のなす角度を $\psi$ をとしましょう。一年の間、地球-北極星ベクトルは変動しませんが、地球-太陽ベクトルは地球の公転によって変動します。そのため、角度 $\psi$ は時間（日）とともに変動していくことになります。よって、まずは $\psi$ を時間（日）の関数として記述することを目指します。

　太陽 $ \boldsymbol{x}_{\rm Sun} $ を原点 $ (x,y,z) = (0,0,0)$ におき、地球 $ \boldsymbol{x} _ {\rm Earth} $ はその周りを $xy$ 平面内で時間 $t\in[0,365]$ （日）に基づいて公転するとしましょう（北半球の冬至を $t=0$ とします）。赤道傾斜角 $ a=23.4 $ (度) として、地球-北極星ベクトル $ \boldsymbol{e} _{\rm Polaris} $  は $ xz $ 平面内に常にあるとします。すると、$ \psi $ は時間変動する地球-太陽ベクトル $ \boldsymbol{e} _{\rm Sun} (t) $  と、固定された地球-北極星ベクトル $ \boldsymbol{e} _{\rm Polaris} $  の内積から求めることができます。具体的には、三角関数を使って次のように書けます：

```math
\boldsymbol{e}_{\rm Sun} (t) = \frac{\boldsymbol{x}_{\rm Sun}-\boldsymbol{x}_{\rm Earth}} {|\boldsymbol{x}_{\rm Sun}-\boldsymbol{x}_{\rm Earth}|}:=-\left(\cos \frac{2\pi}{365}t, \sin \frac{2\pi}{365}t,0 \right)\\

\boldsymbol{e}_{\rm Polaris} = \frac{\boldsymbol{x}_{\rm Polaris}-\boldsymbol{x}_{\rm Earth}} {|\boldsymbol{x}_{\rm Polaris}-\boldsymbol{x}_{\rm Earth}|}:=\left(\sin \frac{\pi}{180}a,0,\cos \frac{\pi}{180}a \right)\\
\cos \left( \frac{\pi}{2}-\psi (t) \right)=\boldsymbol{e}_{\rm Sun} (t) \cdot \boldsymbol{e}_{\rm Polaris}\\
\psi(t) =\frac{\pi}{2}-\arccos (\boldsymbol{e}_{\rm Sun} (t) \cdot \boldsymbol{e}_{\rm Polaris})\\
```

　一方、等緯度面（下の断面）を見ると、自転する円盤を真上から俯瞰した図になっています。この円盤は長さの異なる「昼の弧」と「夜の弧」を持っており、これらの弧に対応する角度を求めれば、**その季節にその緯度にいる観測者**が一日の間に経験する昼の長さと夜の長さの比がわかります。円の一周は $ 2\pi $ なので、夜の弧に対応する角度を $2\phi$ とおけば、昼の弧に対応する角度は $ 2\pi-2\phi$ となります。昼の長さ $L$ (時間)は、それに $ 24/(2\pi) $ を掛けるだけで求まります。$L$ を時間 $t$（日）の関数として書いたものが、日照時間の年内変動パターンを表します。観測者のいる緯度を $\theta \in [-\pi/2, \pi/2]$ （ラジアン, 正が北緯、負が南緯）、地球の半径を $r$ とすれば、 $L(t)$ は幾何学的考察から、やはり三角関数を使って簡単に書けます：

```math
\cos \phi (t) = \frac{r \sin \theta \tan \psi (t)}{r \cos \theta}\\
\phi (t) = \arccos (\tan \theta \tan \psi (t))\\
L (t) =24\left(1-\frac{ \phi (t) }{\pi}\right)
```

　こうして幾何学的考察から得られた日照時間の年内変動パターン $L(t)$ は、どれくらい現実のデータを反映しているのでしょうか。たまたまネットで見つけたブログに、気象庁の日の出・日の入り時間から日本の３地点（北海道・東京・沖縄）における日照時間をまとめたグラフがありました（ブログ主の方は太陽光発電の効率を調べていたらしいです）。このグラフを拝借して、$L(t)$ に三地点の緯度を代入して得られた日照時間の変動パターンと比べてみましょう。

![hikaku.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240908/4f3bae94-f6d3-990b-0c86-2c6aabc12075.png)
[右図の引用元：太陽光発電&eco ~ かーずのLovin' Life ~](https://ameblo.jp/mixturet/entry-10570876918.html)

　日照時間が最も短い冬至から始まり、半年のところで日照時間が最も長い夏至（ミッドサマー）が来ます。変動パターンの曲線はサインカーブ状になり、おおむね右図の気象庁のデータと一致しているように見えます。縦軸を見る限り、定量的なずれもせいぜい一時間以内に収まっていそうです。確かに $L(t)$ は日照時間の年内変動パターンを表す関数といって差し支えなさそうです。関数 $L(t)$ の性質についてもう少し調べてみましょう。上図では日本の三地点の緯度を代入しましたが、これをもっと色々な緯度で調べてみると、次のような絵が書けます。
![極端.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240908/a0b2d8bb-a934-5ea1-72ba-f9dee4e2b2fa.png)
　期待したように、赤道では日照時間の年内変動がまったく現れません（この安定した気候が熱帯雨林のような種の多様性に富んだ生態系を作ることに寄与していると言われています）。一方、北緯あるいは南緯が $66.6(=90-23.4)$ 度を越えると、夏至または冬至の周辺で関数の値が存在しない領域が現れます。これは数学的には$\arccos$の引数が$\arccos$の定義域を外れることから値が存在しなくなることに由来しますが、現実には白夜（$L=24$）あるいは極夜（$L=0$）になっていると解釈することができます。ですから例えば、「白夜が9日続く緯度」を求めるには、$L(t;\theta)=24$ となる $t$ の幅がちょうど $9$ であるような緯度 $\theta$ を求めればよいわけです。この問題は解析的に解くことが難しいため、求根アルゴリズムによって数値的に解く必要があります。今回はキリの良い数字を選んで、白夜が0, 10, 20, 30日となる緯度を求めました（ここで0日というのは白夜がちょうど現れ始める緯度、つまり66.6度のことです）。9日がおおよそ中央に来る0〜20日の範囲をホルガ村の推定区間としておきましょう。

# 結果と考察
　さて、実際にこれらの緯度の線とストックホルムからの同心円（時速50, 60, 70km）を重ね描きした地図が以下のものになります：
![majiwaranai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240908/1cc051bc-1e43-038f-ccaf-5899c81a9d9d.png)
　**全然交わりません。**

　そもそも白夜が起こる最南端の北緯66.6度というのは、スウェーデンの国土の北端から20%くらいの場所でようやっと交わるくらいの緯度であり、ストックホルムから車で4時間で行ける距離にはとてもありません。

　ホルガ村は、アリ・アスター監督の心の中にしか存在しないのでしょうか……。

　しかし色々調べてみると、あるひとつの事実を見落としていたことに気付きました。
　それは、**白夜の定義には２つある**ということです。

　今まで計算していたのは「狭義の白夜」で、これは英語では**midnight sun**（真夜中の太陽）と呼ばれる現象です。劇中の台詞で「白夜」となっている字幕も、音声ではmidnight sunと言っています。midnight sunは、その名から察せられる通り、「一日中太陽が沈まない現象」のことを指します。一方、「広義の白夜」は、英語では**white night**（白い夜）と呼ばれ、「太陽が沈むには沈むけど、それでも一日中明るい現象」のことを指します。

　「太陽が沈むのに空が明るい」とは、どういうことでしょうか。これは**光の散乱**と呼ばれる現象に起因します。太陽は地平線の下に沈んでしまっているので観測者に直射日光は届かないのですが、沈んだ太陽が地平線に対して浅い角度に存在する場合、観測者の上空の大気分子にはまだ太陽光が当たっています。大気分子にぶつかった光はばらばらに向きを変え、中には真下にいる観測者の方向に進む光もあります。この散乱光のために、地上にいる観測者にとっては太陽が沈んでいるのにもかかわらず空が明るく見えるわけです。

　散乱自体は緯度と関係なく起こるので、地球上のどこでも日の出の直後と日の入りの直前にはこの現象が起きます。[**薄明、トワイライト、マジックアワー**](https://ja.wikipedia.org/wiki/%E8%96%84%E6%98%8E)などと呼ばれる時間帯です。劇中でダニーが失神から目覚めた直後に「２時間ほど空が暗くなったよ」と言われていたのは、おそらく薄明のことだったのでしょう。また、ジョシュが宿泊小屋を抜けてルビ・ラダーを盗撮しに行ったときの空も若干暗かったので、薄明だったのではないかと推測できます。
![さんらｎ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240908/8dbe6a39-7d81-8fab-a033-9169c77f265b.png)
　薄明は明るさによってさらに３つに分類され、中でも太陽が地平線下**６度**以内の場合は**市民薄明**と呼び、外で本を読むのにも支障を来さない程度の明るさらしいです。そして「広義の白夜」は、この市民薄明以上の明るさが一日中保たれる日のことを指すようです。上手に示した幾何学的考察から、$\psi(t)$に６度足し引きするだけで、$L(t)$を使って「広義の白夜」の日数を求めることができるはずです。修正した$L(t)$によって作り直した地図が以下のものになります：
![ほｒが-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240908/b008d1fb-fe74-7b93-b13e-7936834840c7.png)
　**今度はちゃんと線が交わりました。**ひと安心です。しかも右側の交点は海を越えてフィンランドに行ってしまうので、自動的に候補から外れます。よって、スウェーデンに残った、左側の**グレーに塗りつぶされた領域**が、「ストックホルムから車で4時間」と「白夜が9日続く」という２つの条件をおおよそ満たす場所、すなわち**ホルガ村の位置する場所**であると推測されます。

　とはいえ、候補領域の面積は約2000平方キロメートル、およそ東京都ほどの広さがあります。次の長期休暇にでもホルガ村を探しにスウェーデンへ旅行しようかと思っていたのですが、この広さを探索するのは流石に骨が折れます。できたら旅行の前に、もう少し候補領域を狭めたいところです。そのためには劇中で提示されたものの今回は使用しなかった他の情報（ルバーブやイチイが自生する山、最寄り駅まで車で往復３５分かかる等）を使う必要があるでしょう。機会があれば、これらの条件を真面目に検討してみるのも面白いかもしれません。

# 答え合わせ
　本来は以上で記事を締めても良かったのですが、執筆のために色々情報を調べていると、当初予想していなかった事実が判明しました。

　映画「ミッドサマー」の舞台である**ヘルシングランド地方もホルガ村も、スウェーデンに実在する地名**なのです。アリ・アスター監督、正気なのでしょうか。実在の地名を使ってこんな映画を作ってしまって、地元の人からクレームが来ることを恐れないのでしょうか。ヘルシングランドなどという[**如何にもホラー然とした大仰な名前**](https://ja.wikipedia.org/wiki/%E5%90%B8%E8%A1%80%E9%AC%BC%E3%83%89%E3%83%A9%E3%82%AD%E3%83%A5%E3%83%A9_(%E5%B0%8F%E8%AA%AC))、てっきり架空の地方なのだとこの記事を書くまで思っていました。**日本を舞台にした映画**で[**ジャンジラ市**](https://ja.wikipedia.org/wiki/GODZILLA_%E3%82%B4%E3%82%B8%E3%83%A9)だの[**メガ崎市**](https://ja.wikipedia.org/wiki/%E7%8A%AC%E3%83%B6%E5%B3%B6)だのを見てきたので、てっきりその類の**「絶対に実在の地名とかぶらなさそうな架空の地名」**だと思い込んでいました。

　とにかく、ヘルシングランドもホルガ村も実在する以上、答え合わせをすることができます。しかし、ヘルシングランドというのは現在の行政区分ではないため、Wolframのデータベースには入っておらず、直接図示することができませんでした（日本でいうところの尾張や近江のような旧国名らしいです）。一方、ホルガ村の位置はGoogle Mapで調べてすぐにわかった（[北緯61.27度、東経16.56度](https://goo.gl/maps/tceL1hFch9o14ABr7)）ので、この点を上と同じ地図内に表示することができます：
![ほｒがー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240908/4c84ddb8-330e-b383-0bf9-4c9ed678fa33.png)
　残念ながら、実在のホルガ村の位置は、推定した候補領域とは**被っていませんでした**。先走ってスウェーデン旅行に出掛けなくてよかったです。徒労に終わるところでした。とはいえ、当たらずとも遠からずと言ったところでしょうか、それほど大きく外れているわけでもないように思います。確かに、ストックホルムからの距離は、時速50～60kmの同心円に入っています。

　一方、**白夜の期間は20～30日**と、9日どころか一ヶ月近く続くようです。夏至祭の続く9日という数字は、天文学的な要請ではなく、単に9が何かしらの特別な意味を持っているから選ばれたのかもしれません（たとえば、[北欧神話のオーディンの試練が9日続いたというエピソード](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3#%E7%A5%9E%E8%A9%B1)など）。

　ボルガ村の位置をぴったり当てられなかったのは残念でしたが、少なくとも今回の計算によって、ひとつの新しい発見がありました。それは、**「ホルガ村の白夜は、太陽が沈む『広義の白夜』である」**ということです。そういえば、映画のエンドロールで流れる曲が**"Sun Ain't Gonna Shine"**だったのは、このことを暗示していたのかも……

# おまけ
　その他の劇中に出てきた数字について、いくつかの考察を載せておきます。

- しばしば勘違いされていますが、**劇中で「90年に一度」と言われているのは「大祝祭 (great feast)」**のことで、夏至祭自体は毎年開催されていると思われます。これは去年のメイクイーンの写真が残っていることから察することができます。ところで、この90年という数字は、太陽黒点の周期である**グライスベルグ周期 (Gleissberg cycle)**とおおよそ一致しています。

- ホルガ村では人生を四季に喩えて、0～18歳が春、18～36歳が夏、36～54歳が秋、54～72歳が冬とされます。ということは、**夏至は27歳**。これは**平均的な博士課程の入学年齢**とおおよそ一致しています（日本では26歳、アメリカでは28歳）。クリスチャンたちは文化人類学の博士課程院生です。

- 通常版ではカットされていましたが、ディレクターズ・カット版では**川の儀式**と呼ばれるシーンがあります。このシーンがカットされた理由は、**真っ暗な夜**を撮ってしまったからではないでしょうか。実在のホルガ村では夏至を中心に前後10日以上は白夜ですから、そこに9日続く夏至祭の日程を設定しようとすると、真っ暗な夜は見れないはず。他にもホルガ村の夜が真っ暗なシーンがひとつだけあるのですが、あれはあくまでも夢の中です。

# コード（Mathematica）

## 太陽と地球

```mathematica:sun_and_earth.nb
anime = Block[{h}, Table[h = Mod[m*30, 24]; Show[{
      Graphics3D[{Tube[{10 {Cos[(2 Pi m)/12], Sin[(2 Pi m)/12], 0} + 
           RotationMatrix[Pi/8, {0, 1, 0}].{0, 0, -1.5}, 
          10 {Cos[(2 Pi m)/12], Sin[(2 Pi m)/12], 0} + 
           RotationMatrix[Pi/8, {0, 1, 0}].{0, 0, 1.5}}, 0.05],
        FaceForm[Orange], Sphere[]}, Lighting -> "Standard"],
      ParametricPlot3D[
       10 {Cos[(2 Pi m)/12], Sin[(2 Pi m)/12], 0} + 
        RotationMatrix[Pi/
          8, {0, 1, 0}].{Sin[\[Theta]] Cos[\[Phi] + (2 Pi)/24 h], 
          Sin[\[Theta]] Sin[\[Phi] + (2 Pi)/24 h], 
          Cos[\[Theta]]} , {\[Theta], 0, Pi}, {\[Phi], 0, 2 Pi}, 
       Mesh -> None, TextureCoordinateFunction -> ({#5, 1 - #4} &), 
       PlotStyle -> 
        Directive[Specularity[0.1], 
         Texture[(*ここに?Textureで出てくる地球のテクスチャ画像を入れる*)]], Axes -> False, 
       RotationAction -> "Clip",
       Lighting -> {{"Point", White, {0, 0, 0}}, {"Point", 
          White, {0, 0, -1}}, {"Point", White, {0, 0, 1}}}]
      }, PlotRange -> {{-11, 11}, {-11, 11}, {-1.5, 1.5}}, 
     Background -> Black, Boxed -> True, ImageSize -> Large], {m, 0, 12, 1/30}]];
 Export["anime.gif", anime];
```

## 日照時間の年内変動

```mathematica:daytime_pattern.nb
Manipulate[
 a = 23.4;
 Polaris = {Sin[Pi/180 a], 0, Cos[Pi/180 a]};
 Sun[t_] = -{Cos[(2 Pi )/365 t], Sin[(2 Pi )/365 t], 0};
 \[Psi][t_] := 
  Pi/2 - ArcCos[Polaris.Sun[t]] + 
   Pi/180 (2 UnitStep[\[Theta]] - 1) 6(*第二項：広義の白夜のための補正項*);
 \[Phi][t_, \[Theta]_] := ArcCos[Tan[Pi/180 \[Theta]] Tan[\[Psi][t]]];
 Plot[24 (1 - \[Phi][t, \[Theta]]/Pi)
  , {t, 0, 365}, PlotRange -> {{0, 365}, {0, 24}}, AspectRatio -> 1, 
  PlotStyle -> Thick
  , AxesOrigin -> {365/2, 0}
  ], {{\[Theta], 60.6}, -90, 90, 0.1}]
```

## ホルガ村周辺の地図

```mathematica:harga.nb
GeoGraphics[{
  Red, Thick,
  GeoCircle[{59.33, 18.07}, Quantity[50*4, "Kilometers"]],
  GeoCircle[{59.33, 18.07}, Quantity[60*4, "Kilometers"]],
  GeoCircle[{59.33, 18.07}, Quantity[70*4, "Kilometers"]],
  Blue, GeoPath[{{60.6, 18.07 - 5}, {60.6, 18.07 + 5}}],
  GeoPath[{{60.7, 18.07 - 5}, {60.7, 18.07 + 5}}],
  GeoPath[{{61., 18.07 - 5}, {61., 18.07 + 5}}],
  GeoPath[{{61.4, 18.07 - 5}, {61.4, 18.07 + 5}}],
  {EdgeForm[{Thick, Black}], FaceForm[White], 
   Disk[GeoPosition[{61.27, 16.55}], 0.1]}
  }, ImageSize -> Large, 
 GeoRange -> {{59, 62}, {18.07 - 5, 18.07 + 5}}]
```