y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

Unity で正規分布のグラフを描く

先日、第78回 PHP勉強会 というイベントに参加して、Unity の話を聞くことができました。私は Unity に触ったことはなかったのですが、それほど難しくもなさそうだと思えたので、簡単なプログラムを作成して遊んでみました。

私はデータの可視化といった分野に興味があるので、今回は、Unity の ParticleSystem を利用して 2 次元の多変量正規分布のグラフをアニメーションとして描画してみます。作成にあたっては以下の記事が参考になりました*1
Graphs, a Unity C# Tutorial

できあがりは以下のようになりました。ウェブブラウザ上で動作を確認できます。
f:id:y_uti:20140607144242p:plain
Unity Web Player | unity-normal-distribution

初期状態では、画面上に二次元標準正規分布が描画されます。表示範囲は -5 から +5 です。画面左上のスライダーを操作することで、平均、分散、共分散の値を変更できます。平均は、表示範囲と同じく -5 から +5 まで動かせます。分散は、0.1 から 5 の範囲で動かせます。共分散は、そのときの分散の値に対して設定可能な最小値、最大値がそれぞれスライダーの両端になります*2

ソースコードy-uti/unity-normal-distribution · GitHub にあります。Unity のプロジェクトを GitHub で管理する方法については、以下の記事が参考になりました。
Unity で GitHub しよう!

Windows から GitHub を利用するために GitHub for Windows を使いましたが、これを使って Unity のプロジェクト用にリポジトリを作成したときには、生成される .gitignore から *.meta の行を削除しておく必要があります。Unity では GameObject とスクリプトの対応付けに GUID を用いますが、生成された GUID は meta ファイルに記録されるため、Unity のプロジェクトでは meta ファイルを commit から除外してはいけません。Unity の公式フォーラムに掲載されている以下の記事も参考になりました。
Unity and Git: Missing Sprites and Scripts | Unity Community

*1:というより、この記事を見つけたので、実装してみようと思い立ったというのが正確なところです。

*2:正確には、分散共分散行列の行列式が 0 になるような Cov(X1, X2) の 99.9% までの範囲で動かせます。