衝突判定をする上で「基本プリミティブ」を定義すると実装が楽になります。この章ではそんなプリミティブを定義してみます。下記のプリミティブの具体的な実装はprimitive.hとして公開致します(^-^)。浮動小数点の誤差が問題になります。数学的には0のはずなのに計算誤差で0.000001みたいな小さな誤差が出て衝突していないと判定される事があります。これによりプルプル震えたりすり抜けたりと割と散々なのです。誤差イプシロン(ε:epsilon)は科学系の文献で誤差として良く利用されるギリシア文字です。3次元ベクトル(Float3)点やベクトルなどを表す基本中の基本の型になります。const;};getNormメソッドは非破壊に標準化したFloat3を取得します。「正規化値が欲しいけど成分そのままで...」というケースは結構あります。点(Point)とベクトル(Vec3)点はFloat3型として扱った方が良いので、typedefで再定義するくらいで良いと思います。const;}Vec3はFloat3を継承していますが、Float3(Point)で値を代入したい事もありますので、コピーコンストラクタと代入演算子を定義しています。直線(Line)直線(無限に伸びた線)は「直線上の一点と方向ベクトル」で定義できます。const;};機能は小さいものなら追加で加えても良いと思いますが、とりあえず値定義だけで今は良いかなと。線分(Segment)線分は2つの点を結ぶ線ですが、レイ(方向性を持った線分)などでも使えるようにするために始点とベクトルで定義しておきます。球(Sphere)球は中心点と半径のみで定義できる軽量なプリミティブです。カプセル(Capsule)カプセルは線分上を半径rの球がスウィープした図形です。