[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
SF小説『クロックワーク・ロケット』の世界のシミュレーションを作ってみました。
ただし、正しいシミュレーションになっているかは少し自信がありません。
『クロックワーク・ロケット』の舞台は別の宇宙です。
この宇宙と物理法則が違います。
相対性理論の効果が逆になっているのです。
加速すればするほど主観の時間は速く流れていきます。
そうなったのは、時間と空間が完全に等価だからです。
細かい理屈はさておき、時間と空間が等価なので、過去に戻ることが可能です。
ちょうど、隣の部屋まで歩いて移動することが出来るように。
タイムトラベルが可能な世界とはどのようなものでしょうか?
体感するために、このプログラムを作ってみました。
矢印キー[↑][↓][←][→]で操作できます。
※下の2次元のキャンバスをクリックしてからキーボード操作してください。
このシミュレーション宇宙はは3次元です。
空間軸が2つと時間軸が1つです。
※ただし、『クロックワーク・ロケット』は4次元宇宙です。
空間軸が3つと時間軸が1つです。
いきなり4次元はプログラムが難しくなりそうなので、こうしました。
が、タイムトラベルが可能である、という点は同じです。
作者のイーガンさんのサイトでは、2次元(空間軸1つ、時間軸1つ)の図で説明しているので、それよりは作中に近いはずです。
上の3D画像は時間軸も含めたこの宇宙の全体像です。
たくさんの物体の世界線が描かれています。
下の2D画像は時間が流れいる2次元空間の図です。
たくさんの粒子が動き、ぶつかり合います。
『クロックワーク・ロケット』の世界はわたしたちの宇宙とは物理法則が違うため、いろんな変な現象が起きます。
この宇宙では速度の上限は光速です。
しかし、『クロックワーク・ロケット』では無限の速度のロケットを作れます。
無限の速度のロケットというと変ですが、時間軸が母星とは直角になっているというだけです。
このデモプログラムでも速度無限がありえます。
とはいえ、時間が離散的なので「ものすごく速い有限の速度」と違いを実感することは出来ませんが。
この宇宙では加速してから母星に戻るととウラシマ効果で自分の時間はあんまり経っていませんが、
『クロックワーク・ロケット』では逆に母星であんまり時間が経っていません。
この宇宙では過去に戻るタイムマシンは作るのが難しそうですが、『クロックワーク・ロケット』ではそうではありません。
静止した状態から無限の速度に加速すると時間軸が90°傾くようです。
そこからさらに無限に加速すると、180°傾きます。
時間が逆行しそうですね。
そのままでは母星に戻っても母星の人たちと時間軸が逆なのでコミュニケーションが出来ません。
しかしある程度時間を戻って、そこからさらに270°、360°と時間軸を戻せば、時間の流れる方向が一致して、母星の過去の人達とコミュニケーション出来そうですね。
色々わけあって、『クロックワーク・ロケット』の宇宙はトーラス状だと推測されています。
東へまっすぐいけば元の地点にいずれ戻ってきます。
そこまでは現実の宇宙でもありえる話です。
しかし、『クロックワーク・ロケット』の宇宙は時間と空間が等価なので…
時間も元の地点に戻ってきそうですね。
作者のグレッグ・イーガンさんのサイトでは、『クロックワーク・ロケット』の世界ではへんな衝突現象が起きることを解説しています。
3つの物体が都合よく1点に近づいてきて、2つは対消滅し、ひとつは反射し残るのです。
『クロックワーク・ロケット』の作者であるグレッグ・イーガンさんは、自身のサイトで『クロックワーク・ロケット』の宇宙を「凍りついた、不変の」ものと考えてはいけないと言っています。
「時間が本当は存在せず、4つの軸があるだけなら、それは凍りついた宇宙だ」、と読者が考えるのを恐れたのでしょう。
私たちの宇宙も時間軸まで含めれば凍りついてますからね。
しかしこのシミュレーションでは、「凍りついた、不変の」3次元宇宙をまず作り、それをスライスして2次元空間と時間軸を作り出しています。
「凍りついた、不変の」3次元宇宙は私の手作業で作りました。
『クロックワーク・ロケット』の物理法則に反しないような宇宙の歴史をひとつまるごと作ったのです。
これは、『クロックワーク・ロケット』の物理法則を満たす時間発展する2次元宇宙を作るのが難しかったため、やむを得ずこうしたのです。
※なにしろ、タイムトラベルが可能とあって、普通の手段でシミュレーションは不可能だと思えました。
未来の物体の情報が現在に影響するわけですから。
普通にやっていたらつじつまが合わなくなってしまいます。
『クロックワーク・ロケット』の宇宙では自分の少年時代の祖父を殺すなどという物語の作成上都合のいいことは不可能そうです。
過去に戻っても、シミュレーションがその時点からやり直しにはなりません。
この方法のデメリットは、矛盾のない宇宙の歴史を手作業で作るしかなさそう、という点にあります。
これではシミュレーションというよりは小説とか物語を考えるのに近い気もします。
一応物理法則はちゃんと満たしていますが、CPUではなく自分の脳を使わなければならないというのは大きなデメリットです。
いちおう、次のような方法だと、プログラムだけで宇宙の歴史の自動生成は出来るでしょう:
サルのタイプライター方式で、大量の宇宙の歴史の候補をランダムに生成します。
そこから物理法則を満たしている宇宙の歴史だけを選ぶプログラムを書く…。
そうすれば、自分の頭は全く使わず、『クロックワーク・ロケット』の世界を作り出せます。
ただ、これはものすごく計算資源を食いそうです。
しかし今になって考えてみると、もうちょっとスマートな方法も合ったような気がします。
あまり自信はありませんが。
たとえば手作業でもサルのタイプライターでもなく、時間発展のシミュレーションで宇宙の歴史を作り出すような…。
よく考えると、時間方向にもトーラス状な世界というのは、プログラムではありふれたことではないでしょうか。
使えるメモリが有限で一定な宇宙は、いずれ一定のことを繰り返すサイクルに落ち着きます。
(これこそが、同じ作者の『順列都市』で、無限に成長するコンピュータを創りだした理由でした。もちろん、そのサイクルはものすごく長く、1サイクル一兆年ということもありえるかもしれませんが)
ということは、時間発展のシミュレーションを行い、一定のことを繰り返すサイクルに落ち着いたら、そこだけを切り出し、宇宙の歴史とすればいい気もします。
時々起きる、前触れ無く物質と反物質を生み出して加速するという現象は、起きるかどうかを一定ビットの擬似乱数で決めれば、ちゃんと時間軸も繰り返しそうです。
まあ都合よく3つの玉が1点にあつまりふたつが対消滅する現象はもうどうしようもありませんけどね。
もっとも、自由に時間軸を動かそうとすれば、凍りついた宇宙を一度創りださねばならないことには変わりありませんが…。