Unity

円周率シミュレーターを一日で作ってみた【Unity】

  1. HOME >
  2. Unity >

円周率シミュレーターを一日で作ってみた【Unity】

スポンサーリンク

円周率を近似するシミュレーションゲームを一日で作ってみました。

普段はR言語を用いた統計解析を解説していますが、学校の課題でアプリの作成をすることになったので一日で作りました。

一日で作成したのでクオリティに関してはご了承ください。

Pi Simulator

下の画像のような円周率を近似するシミュレーションゲームを作成しました。

今回紹介するゲームは次のURLにて遊べます。

https://sharemygame.com/@usagisan/pi-simulator

右上の数値は円周率の近似値であり、モンテカルロ法によって算出しています。

半径\(1\)の円と一辺の長さが\(2\)の正方形の面積の比は、次のように半径1以内に落ちたボールの数と落としたボールの数の比で近似することができます。

\begin{align} \cfrac{\pi}{4} \approx  \cfrac{半径1以内に落ちたボールの数}{落としたボールの数}.\end{align}

すなわち、円周率\(\pi\)は右辺のボールの数の比の4倍であると近似することができます。

\begin{align}\pi \approx 4\cfrac{半径1以内に落ちたボールの数}{落としたボールの数}.\end{align}

補足ですが、ボールの落ちる座標を\( -1\leq X \leq 1\)、\(-1 \leq Y \leq 1\)であるような二組から成る確率変数\((X, Y)\)とすると、半径\(1\)以内に落ちる確率は

\begin{align}\mathrm{Pr}\{ \sqrt{X^2 + Y^2 } \leq 1\}\end{align}

であり、試行回数を増やしていくと先ほどのボールの数の比はこの確率に収束していきます。

自作ゲームの遊び方

遊び方は簡単で、「Enter No. trials...」と書かれた入力欄にシミュレーション回数を入力し、Start ボタンをクリックすることでシミュレーションを開始することができます。シミュレーションを再開したり中断したい場合は、Reset ボタンをクリックしてください。右上にシミュレーションの途中経過(シミュレーションによって得られた円周率, 残りのボールの数、半径 1 の円の中に落ちたボールの数、半径 1 の円の外に落ちたボールの数)がリアルタイムに表示されます。 また、左上の Switch camera をクリックすると、画像2の視点に切り替わり、より臨場感のあるシミュレーションを堪能できます。

実行画面1

実行画面2

 

スクリプト

あんまり意味はないと思いますが、シミュレーションゲームのスクリプトを載せときます。

次のBall.cs1つ1つのボールの落下位置などを算出するスクリプトです。

DropBalls.csは先ほどのBall.csが付いたボールプレファブをインスタンス化し、落とすためのスクリプトです。入力された試行回数分のボールを射出します。

次のPiSimulationManager.csはシミュレーションゲームの全体(半径一以内に落ちたボールの数、外側のボールの数、残りのボールの数)を保存するためのスクリプトです。

シミュレーションゲームには全く関係ないですが、以下のスクリプトCameraManager.cs、RotateSun.csはカメラの切り替えや太陽の移動のためのものです。

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-Unity
-, , ,