1. 無職の学び舎
  2. >
  3. 無職はゲーム数学の勉強をする
  4. >
  5. 衝突判定をしよう

衝突判定をしよう

どうも無職です、ゲームの中の世界では日々、モノとモノがぶつかってるかどうかの判定が盛んにおこなわれています。

世の中はもっぱら3Dゲームが盛んですが、そんななかで無職は2Dの衝突判定についてお勉強をしています。

この記事には、無職が衝突判定の勉強する中で、まずこれは抑えておくべき基本だなと思ったことを中心にまとめています。

基本1 ベクトル

衝突判定ではとにかくベクトルを駆使するのでベクトルの基本的な知識(足したり、引いたり、伸ばしたり)は必要不可欠です。

衝突判定するならまずベクトルを学びましょう。

ベクトルの表記について

このサイトではベクトルを $\vec{a}$ のように、小文字のアルファベットの上に矢印を付けたもので表記しています。

また、$点A$ から $点B$ に向かうベクトルの場合は $\vec{AB}$ のように表記しています。

基本2 ベクトルの長さを求める

衝突判定ではベクトルの長さを求める事があります。ベクトルの長さは三平方の定理を使って簡単に求める事ができます。

ベクトルの長さと聞こえたら、あぁ三平方の定理ですぐ求められるねぇと思えるといいと思います。

ベクトルの長さの表記について

ベクトルの長さは $|\vec{a}|$ のように、ベクトルに絶対値の記号を付けて表記しています。

基本3 点と点の間のベクトルを求める

衝突判定をしていると $点A$ と $点B$ があったとき、$A$ から$B$に向かうベクトルが欲しいという衝動にかられることが度々起こります。

2点間の間のベクトルを求めるには、ベクトルを引き算するだけで求められます。

それだけなのですが、ベクトルの引き算で2点間のベクトルが出てくるという事を知らないと、なんで引き算してるのぉぉぉ?という場面が大量にでてきます。

ベクトルの引き算を見かけたら、あぁ、2点間のベクトルを求めてるんだなと思えるようになってください。

基本4 ベクトルの正規化

ベクトルの正規化(ベクトルの長さを1にする)もなかなかの頻度で登場します。

ベクトルの長さを1にしておけば、そのベクトルを2倍すれば向きはそのままに2倍のベクトルが、3を掛ければ3倍のベクトルがと、向きを変えずに好きな長さのベクトルを作れます。

長さを1にしておけば好きな長さのベクトルを作れるというあたりが素敵で、そういう用途で良く使います。(他の用途もあります)

基本5 ベクトルの内積と外積

衝突判定ではありとあらゆるところでベクトルの内積と外積がでてきます。

ほとんど内積と外積しか使ってないのでは?と思うくらいにでてきます。

なので、衝突判定をするうえで、「内積と外積がわからない」=「全てがわかりません」と言っても差し支えないほどです。

いきなり全ては理解できずとも、計算方法や特性については以下の記事を読んで、予め雰囲気をつかんでおくと良いと思います。

基本6 三角関数

高校で習ったであろう$sin$ や $cos$ という三角関数も頻繁に登場します。

直角三角形があった時に $sin = \frac{高さ}{斜辺}$、$cos = \frac{底辺}{斜辺}$ で求められるという感覚は重要になります。

また$sin$ と $cos$ をグラフでイメージして、基本は0 ~ 1 を行ったり来たりしてるんだな~という感覚も重要になったりします。

基本7 図形の定義

例えば直線と直線の交点を求めたいとなった時、数学のお勉強では 直線は $y=ax+b$ という式で表され、連立方程式を解けば... というような事を習ったかもしれません。

しかし衝突判定においては、こういった $y=ax+b$ のような方程式を使うことはあまりなく、基本はベクトルを駆使して求めていきます。

衝突判定で直線や円といった形をどう扱うのかについては衝突判定の図形定義にまとめていますので、必要に応じて確認してみて下さい。

基本8 数式は根性

至るページに沢山の数式を書いていますが、無職は数式を見て「なるほど!」と理解できるようなタイプではありません。

むしろなんでこの式がこの式になるんだ?とたった1行の数式に数時間~数日、悩み苦しむ事も少なくありません。

無職は「数学が出来る人は、数式をみたら一発で理解できる」というようなイメージを持っていましたが、結局のところ数学は暗記でも理屈でもなく根性なのではないかと思い始めています。

基本9 証明は力なり

数学は便利な公式を使って計算して答えを出すだけでも使えなくはないですが、それだと応用が効かないと思っています。

なんでこの計算になるの?なんでこれで求められるの?という何故を追求することで、いろんな知識が繋がって徐々に応用できる力が身につく、そんな気がします。

数学の証明はまさに、この何故?というところを解き明かしているので、証明をちゃんと理解するというのが数学の本当の力を身に着けるために必要なんじゃないかなと思います。