忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

<直交>三部作の「波面が後ろに進む波」っぽいシミュレーション

SF作家グレッグ・イーガンさんの<直交>三部作は、この宇宙とは違う別の物理法則の宇宙を舞台にしたSFです。違う物理法則の宇宙と言われると、一見こちらの宇宙とは何の関係もないように思え、身構えてしまいます――が、実際はその宇宙をシミュレートしているこちらの宇宙のコンピュータはその宇宙の物理法則に「も」従っているのです。どうでしょう?親しみがわいてきませんか?別の宇宙の物理法則がこの宇宙と関係ないなんてことはありません。第一、この小説を書いていた時のイーガンさんの脳は<直交>宇宙の物理法則の影響を明らかに受けています。もちろん読者の脳もです。

というわけで、もっとたくさんのこちらの宇宙の物質を別の宇宙の物理法則に従わせてみましょう。今回行うのは<直交>宇宙に出てくる光のシミュレーションです。この光は波の進み方が変です。こちらの基準では、ですが。では遊んでみましょう。


<直交>宇宙の光シミュレーション(2次元)


シート上のある点にかかる力 = 指数関数的爆発をおこす力 + ×爆発を妨げる復元力

遊び方

緑色のシートをマウスでドラッグすると波ができます。マウスのホイールを回すとつまみが大きくなり、より広い範囲を引っ張れます。

リセットボタンを押すと波が消え、たいらな状態に戻ります。

数式の中のテキストボックスには数字を入力できます。この数字は波の爆発を妨げる力を表します。これを0にすると必ず爆発するので注意しましょう。

Ctrlキーを押し続けている間はカメラ移動モードになります。キーを押し続けながら、マウスをドラッグしたりホイールを回したりしてみてください。

解説

厳密にいえば、このシミュレーションは<直交>三部作に登場するものとは違います。<直交>三部作の世界は3次元ですが、このシミュレーションは2次元のシートです。

ですが、<直交>宇宙の光特有の奇妙な性質はこのシミュレーションでも十分確認できます。波をつくると、波は集まりながら広がります。復元力をある程度小さくして波を作ると、一気に指数関数的爆発します。第一部の主人公が悩んだやつです。

3次元にしなかったのは計算がかなり多くなりそうだったのと、表示しても何が起きているのかわかりにくそうだったからです。単純に手前の点がジャマをして奥の様子が見えにくそうな気がしますね。(3次元プログラムを書くこと自体は簡単です。)

小説中で指数関数的爆発は起きないことになっているのですが、このシミュレーションでは起きます。指数関数的爆発を防ぐ復元力を下げると――たとえば1にすると――マウスでちょんとつついただけでも爆発します。ただし、空間的な波の細かさを調節して爆発が起きるかどうかを制御することはできません。本来ならシワを細かくすると爆発し、シワを伸ばすと安定するのですが。なぜこうなるのかというと、マウスでシートを引っ張る時、細かい波に相当する凹みが境界部分に出来てしまうからです。つまり爆発する時はほんのちょっとの刺激で爆発するのです。マウスを上手く動かしたとしても爆発するかどうかを調節することは出来ません。かわりに復元力の大きさをいじらなくてはいけないのです。

小説で爆発が起きないのは、小説の世界がある種のタイムトラベルのようになっているからです。未来が過去につながっているので、爆発が起きるのならすでにそこは爆発しているはずです。そうでないということは、爆発はこれからも起きないということです。爆発はタイムパラドックスを引き起こすので――過去に戻って自分の祖父を殺すのと同じく――不可能なのです。これは同じくイーガンさんの作品である『百光年ダイアリー』の状況を思い出させます。<直交>宇宙の爆発の問題は次のように答えることができるでしょう:

もし、ある方向に向かって急速に振動する波を、きみが作り出すとする」とジョルジョ。「君がその方向で選んだ周波数がとても大きくて、その二乗単独で、四つの次元の周波数の二乗の和の目標としている数よりも大きくなってしまうのを、何が止めるんだ?」
「そんなことはできない」
「できない?ほかの項のひとつが負の数だったらどうだね?もし振動のひとつの周波数が大きすぎても、方程式を満たすことはできる――別の方向の振動を指数関数的増加と置き換えることによって」
「悪いんだがね、そういうことは起きないんだ。できないんだよ

拍手[1回]

PR