割り算とは何か?について

割り算とは何か?について


このコラムで言いたい結論「割り算を利用するとグリッド空間が作れる。MathfのRoundToInt等で条件分岐を使わなくても計算結果を大きく変える事ができる」

そもそも割り算とは何の為にあるかを考えた時、ある基礎にしたい物体対しての割合を計る時に使う道具なのだと思う。

ケーキという物体の基礎があった場合、これを3人で分けたいと考えれば「ケーキ÷3」になる
既に切り分けられた複数のケーキをひとつのケーキの量と比べて見た場合「1/3ケーキ+1/3ケーキ+1/3ケーキ = ケーキ」になる

もし、3という数字が一つのカタマリ(ケーキ)だと考えれば1は1/3ケーキになる

カタマリがふたつあれば6になる
5なら、1と2/3つまり1.6666666になる

1.66666を四捨五入すると考えると2になる。ケーキ二つでおなか一杯
1.33333を四捨五入すると考えると1になる。ケーキが一つになって寂しい

四捨五入すると結果が変わる
その意味で四捨五入というのは計算結果を大きく変えるトリガーに使えると考えても良い
intの型変換も同じようにfloatからintにする際に1.9fは1に、2.1fは2になる。

四捨五入をプログラムコードで考えた場合以下のようになる

  int CustumRoundToInt (float x)
   {
       if (x > 0.0f) {
           return (int)(x + 0.5f);
       } else {
           return -1 * (int)(Mathf.Abs (x) + 0.5f);
       }
   }

よくみるとコード内にintの型変換がある
これが数字内容により結果が大きく変わる要因となっている

これは例えばグリッドで仕切られた空間のなかで物体を動かす際、重要な考え方となる
1グリッドを基礎とした空間で1.6666の位置に移動した物体を四捨五入すれば2の位置へと動かす事ができる(つまり位置を補正できる

もし1グリッドを2メートルとした空間で3.33333メートルの位置に移動した物体を計算する場合 print(Mathf.RoundToInt(3.33333f/2));
=2グリッド。補正後の位置は2グリッド×2メートル=4メートルとなる

色々なゲームで「半キャラずらし」といった言葉が聞かれる事があるがこれらを実現したい際、これらの理屈は重要な道具となりそうだと思う。

本wikiの横スクロールやDungeonEaterのGridMoveではこのテクニックが利用されている
横スクロールではバッグラウンド用のオブジェクトのトータルの横幅がグリッドの基礎となっていて
プレーヤーの移動した距離を基準にRoundToIntで移動タイミングを決定している



  • 最終更新:2013-10-21 19:31:28

このWIKIを編集するにはパスワード入力が必要です

認証パスワード