クリエイター手抜きプロジェクト[496]雑ネタ編 プログラムで宇宙を表現する/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,400文字)



今回は雑ネタです。前にも少しプログラムで宇宙を表現する、というネタを書きました。今回は、もう少し頑張ってプログラムで宇宙を表現してみたいと思います。

宇宙といっても、ここではSFに出てくるネタもあります。プログラムはWebでおなじみのJavaScriptを使います。

まずはブラックホール。以下のプログラムはブラックホールの1ステップを再現したものです。配列が宇宙空間で、配列要素が宇宙にある物質です。





shift() は配列要素をひとつずつずらします。その結果、配列の最初の要素は消えます。最初の要素は他の変数で受け取ることもできますが、ここでは受け取れないことにします。

// ブラックホール
var space=["F",0,2,"A","z","G",9,-50];
console.log(space);
space.shift();
console.log(space);

1ステップではなく、永続的なブラックホールを再現すると以下のようになります。console.log() は結果を表示しているだけなので実際のところ不要です。

// ブラックホール(完全版)
var space=["F",0,2,"A","z","G",9,-50];
while(true){space.shift();console.log(space);}

このブラックホールで面白いのは、物質(配列要素)は消滅するのに配列そのもの(空間)は消えずに残っていることです。

SFではブラックホールとは逆の動作をするホワイトホールがあります。ホワイトホールの1ステップを再現すると、以下のようになります。

とりあえず、何か物質を出さないといけないので、乱数を発生させています。物質がどこから出てくるかは謎なので、やはりSFだけの世界シロモノかもしれません。

// ホワイトホール
var space=["F",0,2,"A","z","G",9,-50];
console.log(space);
space.unshift(Math.random());
console.log(space);

次に、SFでおなじみのワープです。以下のワーププログラムは、配列の4番目の要素を最初の要素に移動させます。(要素=物質です)

// ワープ
var space=["F",0,2,"A","z","G",9,-50];
console.log(space);
space[0]=space[3];
space[3]=null;
console.log(space);

SFでは何気なく行われている行為ですが、プログラムでは困った事態が発生してしまいます。

ワープした移動先の物質はどこへ行ってしまうのか。そして、ワープ元の空間には何の物質を補填すればよいのか、という点です。上のプログラムではワープ先の物質(要素)は消され、ワープ元の空間には物質が何もない状態になります。

多分、これはまずいのではないかという気がします。エネルギー保存の法則(?)とか何らかの法則が壊れないようにするなら、ワープ元とワープ先の物質を入れ替えないといけないのではないかと。

となると、正しいワープのプログラムは以下のようになります。ワープ元とワープ先の物質が入れ替わります。これで宇宙は安定するはずです。

// ワープ(完全版)
var space=["F",0,2,"A","z","G",9,-50];
console.log(space);
var a=space[0];
space[0]=space[3];
space[3]=a;
console.log(space);

宇宙には通常の物質と暗黒物質(ダークマター)があります。ちなみに、暗黒物質は今、放送されている戦隊モノのネタにされています。(ボスがドン・アルマゲというナイスなネーミングだったり)

・暗黒物質(ダークマター)
https://ja.wikipedia.org/wiki/暗黒物質

・宇宙戦隊キュレンジャー
http://www.tv-asahi.co.jp/kyuranger/

暗黒物質はプログラムで再現できます。空間は例によって配列で示します。

暗黒物質は、質量はあるが物質と相互作用しない(反応しない)ので、プログラムではtrueではないと示すことにします。null, undefinedや0を暗黒物質とするとプログラムでは以下のようになります。

空間のサイズにある物質の数を引けば、暗黒物質の数を求めることができます(0がニュートリノだとすると、他の要素と作用・計算できることになります)。

// 暗黒物質を数える
var space=["A",,2,,"z",,9,,,,1,0,0,0,null,null,null];
console.log("空間のサイズ:",space.length);
var n=0;
for(var i=0; i<space.length; i++){
if(space[i]){n++;}
}
console.log("物質の数:",n);
console.log("暗黒物質の数:",space.length-n);

銀河系の渦巻きの形が暗黒物質のおかげで崩れないとされているのですが、これは最初のブラックホールのプログラムで再現できます。

配列の要素(つまり物質)がひとつずつずれるわけですが、この時に暗黒物質も一緒に移動します。一緒に移動するので、配列全体の形が崩れない(銀河系の形が崩れない)ということになります。

・宇宙の始まりに素粒子で迫る!〜素粒子物理学の最前線
http://s-park.wao.ne.jp/archives/2213

そして、宇宙には暗黒物質の他に暗黒エネルギー(ダークエネルギー)があります。

・ダークエネルギー
https://ja.wikipedia.org/wiki/

宇宙エネルギー全体の割合としては暗黒物質が26.8%、暗黒エネルギーが68.3%、残りの4.9%が通常の物質となっています。

ダークエネルギーによって空間が広がるというのであれば、プログラムでは配列として使っていない領域が広がる、つまりメモリ空間(もしくは空きメモリ)が広がるということになります。

メモリ空間が増える原因としては以下のようなパターンがあります。

(1)他のアプリケーションで使われていたメモリが解放される
(2)物理的にメモリが増設される
(2)仮想メモリが増える(HDDが増設される)

どれが正解なのか分かりませんが、いずれにせよ限界がありそうです。

仮に無制限に増えても、他の宇宙とは干渉しない(親宇宙・小宇宙のパターンではない)ことになります。ネットワーク(もしくは共有メモリ)で繋がっていない限り、宇宙同士は行き来できないことになります。

長くなったので今回はこれでおしまいです。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

写研のフォントは好きでした。映像のテロップ用に1文字20円とか10円で買い出しに行ってました。ちらしとか作ってると、ゴナがあるといいんだけどなあ、と思ったこともあります。

来月、また新しい自動化本が出ます。詳しくは来週アナウンスいたします。

・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・Premiere Pro & Media Encoder自動化サンプル集
http://www.amazon.co.jp/dp/4802090471/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・Adobe JavaScriptリファレンス
http://www.amazon.co.jp/dp/B00FZEK6J6/

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/