javascript は web ページで動的な内容を表すのに標準的に用いられるスクリプト言語です. あらゆる web ページで用いられていますが, 例を挙げると Google マップ など.
C 言語などと比較すると速度は遅いですが, 各ブラウザ・メーカーが競って高速化を進めてきたため 初期に比べれば非常に高速に動作するようになっています. また何より web ブラウザがあれば実行できるので, 今回のような実験のためには手軽です.
coffeescript は javascript の文法を改良した言語で,
実行時には (自動で) javascript に変換された上でブラウザ上で動きます.
(注意: coffeescript は最近は使われなくなってきているので, これから勉強する場合は代わりに typescript などの言語を学ぶのがおすすめです)
web ブラウザ上で 3 次元描画などを行うための規格である WebGL を, javascript から簡単に操作できるようにしたライブラリ. 以下の公式サイトでは様々なサンプルを見ることができる.
ソースコードの zip ファイルには以下のファイルが含まれています.
pendulum/
index.html
-- このファイルをブラウザで開いて下さい. すると以下のファイルは自動で読み込まれますcoffee/
Ball.coffee
-- ボールを表すFloor.coffee
-- 床を表すGUI.coffee
-- GUI (マウス操作や, FPSモニタやコントロールなどの画面表示) を担当するHuman.coffee
-- 棒人間を表すMain.coffee
-- メイン (ここからプログラムの実行が開始される)Mixin.coffee
-- (補助用のクラス)ThreeExts.coffee
-- (補助用のクラス)Trail.coffee
-- ボールの軌跡を表すVerlet.coffee
-- 力学の数値計算用の関数を含むjs/
-- Three.js などのライブラリが入っているフォルダ
下記を参考に chrome を --allow-file-access-from-files
オプションをつけて起動したら,
ドラッグ & ドロップして index.html
を開いてみましょう.
web 上でのデモと同じように表示されるはずです.
そのあとプログラム (*.coffee
ファイル) を変更してみましょう.
変更を保存した後 chrome で F5
キーを押してページを再読み込みすると変更内容が反映されます.
(プログラムを一度にいろいろ変更しようとすると, うまく動かなくなった時にわけがわからなくなってしまうので,
少し変更したらすぐに F5
で確認するようにしましょう)
このソースコードでは「ニュートンの運動方程式を数値計算により解く」ことにより 物体の運動をシミュレーションしています. 以下ではその意味を簡単に説明します. 詳しい説明は前述の 参考サイト の以下の項などをみて下さい.
速度が位置の時間微分 , 加速度が速度の時間微分 であることを思い出すと, 加速度は位置の2階微分 だから, ニュートンの運動方程式 F = ma は
もっと簡単な微分方程式の例として,
上記の微分方程式が v = 1, すなわち速度 1 の等速度運動を表していることに気づけば,
しかしここでは別の考え方 (数値解法) をしてみる. まず, もとの微分方程式の中の微分 を単なる分数 dx÷dt だと思ってしまって, 方程式を以下のように変形する:
このように, 微分方程式の数値解法とは, 実際にわずかに t を変化させ (例えば 0.001秒), そのたびごとに次の
位置 x を計算で求めながら実際の運動 x(t) を構成してゆく手法である.
今回の力学シミュレーションでも, 1秒のうちに何百回もこのような計算を繰り返すことで, ニュートンの運動方程式を
解きながらアニメーションを描画している.
(Verlet.coffee
で数値解法アルゴリズムの Verlet 法を定義し,
Ball.coffee
から呼び出して使っています. 興味のある人は見てみて下さい)