見出し画像

【GASでサイエンス】2D物理シミュレーション用ライブラリ「Matter.js」をGASに組み込んでみる

GAS(GoogleAppsScript)は、WEBベースの一種のマクロ言語です。エクセルなどPCのアプリケーション用のマクロ言語であるVBAなどと似ていますが、これらと異なる大きな利点は、WEBベースであるために、多彩なWEB上のライブラリが引用しやすい事です。

エクセルのVBAでも外部のライブラリの組み込みは可能ですが、GASの場合はより自由度が高く、CDN(コンテンツデリバリーネットワーク)という形で配信されているJavascript用のライブラリなら簡単に組み込んでしまえます。

今回の記事では、そんなWEB上のライブラリの内、科学部門でのライブラリ利用例をご紹介します。取り上げたのは、2次元の物理シミュレーション用ライブラリ「Matter.js」です。

これを組み込んだ(ほんのお試し程度の)GASによる物理シミュレーションアプリをご紹介します。


「Matter.js」とは


「matter.js」は、2Dの物理演算用ライブラリで、丸や四角形などの二次元の物体の動きをシミュレーションできる機能を有しています。

上記がサイトのトップページへのリンクですが、トップページではmatter.js  で実装したデモを色々見る事ができます。

トップページ

物理シミュレーション用のライブラリは様々にありますが、このライブラリを使うと、物体の条件設定、計算、結果の表示までが非常に簡単に実装できます。

ただし、実装は簡単でもシミュレーションの内容はなかなか高度です。

デモ画面をいくつかご覧にいれましょう。

デモ画面1
デモ画面2


沢山の物体が、互いにぶつかり合い、転がりながら動いているのが解ります。(高度な計算をしていると思われますが、計算のすごさを感じない軽快さです)

画面を見ると固い物体だけでなく、紐で複数の物体がつながっていたり(拘束)、ボヨンボヨンと曲がったり(弾性体)するという現象も盛り込まれています。

基本的にはゲーム用途の様ですが、ここまでリアルなら、何らかの実用的な使い方もできるかもしれません。

今回はこれをGASに組み込んでみる事にします。

多彩な物体諸元を、スプレッドシートに書き込んで使う


このライブラリですが、多様な現象がシミュレートできるという事の裏返しで、ユーザがシミュレーションの初期条件として用意する情報が非常に多い事が予想されます。

こんな時は、スプレッドシートが非常に重宝するはずです。スプレッドシートであれば、多彩な数字を整理して記載する事ができます。

そこでスプレッドシート上に物体の諸元を記載し、これを「Matter.js」に読み込ませて実行できれば、初期条件の設定が非常に楽になります。

そこで今回は、以下の様な、物体の諸元を書いたスプレッドシートを用意して、これを読み込んで使うWEBアプリを考えました。

今回シミュレートするのは5つの物体です。そしてこれらの物体諸元を上記の様にGoogleスプレッドシート上に記載しました。 (記載した内容は「物体の種類」「座標(x、y)」「物体のサイズ(幅、半径、高さなど)」です)

次に、これを動かしてみます。

動かした結果(これだけ・・・でも芸は細かいです)

以下が動かした結果です。

動かした結果

設定した5つの物体の内、2つは床と空間で固定された四角計です。そして残り3つを空間にフリーの状態で置きました!という設定ですね。

結果は、それらが落下して止まるだけのものです。

何だつまらん・・・。

しかし、よく観察すると、中々細かい事をシミュレートしている事が解ります。(matter.jsが凄いのであって、GASプログラムの凄さではありませんが)

  • 重力で落下する様子

  • 物どうしが、形に応じて衝突し転がる

  • ぶつかった物体がそれぞれに動く

  • 摩擦があって、静止した物がじわっと動き出す

  • 動いたものが摩擦で止まる

何気ないワンシーンですが、背景では高度な計算がされているものと推測します。

ライブラリの組み込みは簡単

このライブラリは、テンプレートで以下のコードを記述するだけで使う事ができます。

<script src="https://cdnjs.cloudflare.com/ajax/libs/matter-js/0.14.2/matter.min.js"></script>

その内容も難しくありませんが、今回はここまでとします。

次回は、GASによるコードの内容をご説明の予定です。


この記事が気に入ったらサポートをしてみませんか?