Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2015-11-10

月はなぜ地球に落ちてこないか、実際にMOONBlockでプログラミングして確認してみる 06:17

 昨日のエントリ(あなたやあなたの子供がプログラミングすることができると、どんなに素晴らしいことが起きるか - shi3zの長文日記)を書いたあとで、「はて、あの重力シミュレータの書き方は合ってるだろうか」と気になり、いくつか確認するために実際にMOONBlockでプログラムを書いてみることにした。


 といっても、MOONBlockはあくまでも画面まわりに使ってるだけで、実際のコードはほとんどJavaScript実行ブロックで書いてる。


 これを「ズル」と見るか「効率化」と見るかは意見が別れるところである。


 が、enchant.jsで素でコーディングするよりはラクができたので僕的にはこれはこれでぜんぜんOKなのである。


https://i.gyazo.com/85dd66988f5394b333209f5f072f5f53.png

http://goo.gl/vfs1ak


 詳しく見たい人は http://goo.gl/vfs1ak に行くと実際のプログラムを見たり改造したりして試すことができる。


 内容は昨日のエントリに書いた通りだが、初出ではF=maの式展開を誤るという凡ミスをしてしまった。


 さて、やってみればわかるが、地球の周囲に1/6もの重力をもった天体があるとして、それが綺麗な円軌道を描くというのは奇跡のようなものだ。


 このプログラムは始めに100個のランダムな衛星(互いに重力は無視する)をランダムな初速を付けた状態でばら撒く。

https://i.gyazo.com/6c63219a32e9f1f9ad21c5444fb1817b.gif


 画面の真ん中に固定されている赤い惑星が地球だ。

 これだけあっても実際に地球の周回軌道に乗るのは数個の天体でしかないことが実験によって確認できるだろう。

https://i.gyazo.com/663e5c65453d26185a2c5ec38f300cbe.gif


 もちろん、初速を与えないとどうなるかを実験することもできる。

 これがコンピュータのいいところだ。

https://i.gyazo.com/8edd8b812a2c08baa824fa703fc64ddf.gif


 この実験プログラムでは天体同士の衝突判定を入れていないので地球に衝突した月は誤差によって遥か彼方に飛んで行く。

 このプログラムはシンプルだが色々なことを教えてくれる。


 たとえば、自分の考えが正しいか、いかに月が奇跡のようなバランスで成り立っているか知るためには、ランダム性に頼るのではなく自分でパラメータを設定するようにするといい。


 ここに示すシンプルなプログラムは実験用のテストベッドである。

https://i.gyazo.com/80dd28fe4b9567810e553a84f0b86367.png

http://goo.gl/AoSGXq


 このプログラムでは適当な距離と初速が与えられている。

 しかし普通に実行すると、月は地球を無視して飛んでいってしまう。


 重力は距離の自乗に反比例するから、もっと近づけないと地球の重力の影響を受けない。

 自分でパラメータをいじってみて、どうすれば地球のまわりを周回するようになるか考えてみるのが楽しい


https://i.gyazo.com/fd38f126fc5c67c15210fd09b9646aee.gif


 うまくパラメータ調整ができると感動ものだ。


 こういう、トライ&エラーにはビジュアルプログラミングは案外向いてる。

 まあこれが三体問題くらい複雑になるとちょっとこれだけだと難しいんだけど、それも本当は言語設計の問題なのでそれが定義できるようにしちゃえば問題ないんだけどね


 ところでMOONBlockはブラウザ版を無料で使うことができるし、これはスマートフォンのブラウザでも動作する。


 今日から新しくスマホのネイティブ機能、カメラやライトやスピーカーやマイクといった各種機能を使うことができるMOONBlock DXというアプリを発売する。


iTunesへのリンク

iTunes Store へ接続中です。


親子で遊ぼう!プログラミング講座

http://peatix.com/event/127632

週アスPLUSでの紹介記事

iPhone6sだけでプログラミングできる『MOONBlock DX』が11月10日から配信開始 - 週刊アスキー

http://weekly.ascii.jp/elem/000/000/375/375647/


 特筆すべきは、ディープラーニングを活用した「画像認識」ブロックという新機能がついてること。無茶でしょ。

 ビジュアルプログラミングで誰でも簡単に画像認識を利用したプログラムを書くことができるのだ。

 

 12月23日には「親子で遊ぼうプログラミング講座」と題したワークショップも開催する予定。こちらの募集は午前11時から。


 MOONBlockに関しては布留川英一が書いてるこの本がわかりやすい