2015-11-10
■月はなぜ地球に落ちてこないか、実際にMOONBlockでプログラミングして確認してみる 
昨日のエントリ(あなたやあなたの子供がプログラミングすることができると、どんなに素晴らしいことが起きるか - shi3zの長文日記)を書いたあとで、「はて、あの重力シミュレータの書き方は合ってるだろうか」と気になり、いくつか確認するために実際にMOONBlockでプログラムを書いてみることにした。
といっても、MOONBlockはあくまでも画面まわりに使ってるだけで、実際のコードはほとんどJavaScript実行ブロックで書いてる。
これを「ズル」と見るか「効率化」と見るかは意見が別れるところである。
が、enchant.jsで素でコーディングするよりはラクができたので僕的にはこれはこれでぜんぜんOKなのである。
詳しく見たい人は http://goo.gl/vfs1ak に行くと実際のプログラムを見たり改造したりして試すことができる。
内容は昨日のエントリに書いた通りだが、初出ではF=maの式展開を誤るという凡ミスをしてしまった。
さて、やってみればわかるが、地球の周囲に1/6もの重力をもった天体があるとして、それが綺麗な円軌道を描くというのは奇跡のようなものだ。
このプログラムは始めに100個のランダムな衛星(互いに重力は無視する)をランダムな初速を付けた状態でばら撒く。
画面の真ん中に固定されている赤い惑星が地球だ。
これだけあっても実際に地球の周回軌道に乗るのは数個の天体でしかないことが実験によって確認できるだろう。
もちろん、初速を与えないとどうなるかを実験することもできる。
これがコンピュータのいいところだ。
この実験プログラムでは天体同士の衝突判定を入れていない。
従って、青い円で示された月は、画面中央の地球に衝突しそうになると急激なスウィング・バイが掛かって宇宙の彼方へ飛んで行く。
このスウィング・バイという考え方は宇宙計画の要と言ってもいい考え方で、天体の重力を利用した加速方法だ。
アポロ計画はもちろん、ボイジャー計画でもスウィング・バイを上手く活用して燃料を節約しつつ目的の天体に向かった。
このプログラムはシンプルだが色々なことを教えてくれる。
たとえば、自分の考えが正しいか、いかに月が奇跡のようなバランスで成り立っているか知るためには、ランダム性に頼るのではなく自分でパラメータを設定するようにするといい。
ここに示すシンプルなプログラムは実験用のテストベッドである。
このプログラムでは適当な距離と初速が与えられている。
しかし普通に実行すると、月は地球を無視して飛んでいってしまう。
重力は距離の自乗に反比例するから、もっと近づけないと地球の重力の影響を受けない。
自分でパラメータをいじってみて、どうすれば地球のまわりを周回するようになるか考えてみるのが楽しい
うまくパラメータ調整ができると感動ものだ。
こういう、トライ&エラーにはビジュアルプログラミングは案外向いてる。
まあこれが三体問題くらい複雑になるとちょっとこれだけだと難しいんだけど、それも本当は言語設計の問題なのでそれが定義できるようにしちゃえば問題ないんだけどね
ところでMOONBlockはブラウザ版を無料で使うことができるし、これはスマートフォンのブラウザでも動作する。
今日から新しくスマホのネイティブ機能、カメラやライトやスピーカーやマイクといった各種機能を使うことができるMOONBlock DXというアプリを発売する。
特筆すべきは、ディープラーニングを活用した「画像認識」ブロックという新機能がついてること。無茶でしょ。
ビジュアルプログラミングで誰でも簡単に画像認識を利用したプログラムを書くことができるのだ。
12月23日には「親子で遊ぼうプログラミング講座」と題したワークショップも開催する予定。こちらの募集は午前11時から。
MOONBlockに関しては布留川英一が書いてるこの本がわかりやすい
MOONBlockでつくるゲームプログラミング: エンちゃんと遊ぼう!
- 作者: 布留川英一
- 出版社/メーカー: 誠文堂新光社
- 発売日: 2013/12/06
- メディア: 大型本
- この商品を含むブログ (7件) を見る
- 10 http://gigazine.net/news/20151109-headline/
- 9 https://t.co/Q7oVeYXAUn
- 5 http://www.facebook.com/Gertruda
- 5 https://t.co/GaTOxkQj9T
- 4 https://gunosy.com/articles/a49OI
- 3 http://d.hatena.ne.jp/
- 3 https://t.co/U7iLqXslr8
- 3 https://www.google.co.jp/
- 2 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/shi3z/20151109/1447027620
- 2 http://bit.ly/20HVy8r