もし が初期状態で衝突しておらず、後で衝突するときを考えます。
のある辺について、始点の位置ベクトルを 、そこから終点までのベクトルを とします。 のある頂点の位置ベクトルを 、 が移動する速度のベクトルを とします。
の辺と の頂点が衝突すると考えたとき、衝突する点は変数 を用いて と表せます。 この式は二元一次連立方程式であるため、行列計算によって を求めることが可能です。
このとき、 かつ なら実際に時間 で衝突していると考えられます。
これを のすべての辺と のすべての頂点について行います。
次に、同じことを、 が速度 で に向かっていると考えて、 を逆にして行います。
これによって衝突する最短の時間がわかります。
上で述べた方法は、 が初期状態で重なっている場合はうまくいきません。
例えば次のような場合を考えてみましょう。
この例では頂点と辺がくっついているわけではないため、上で述べた解き方では正しい衝突までの時間が出ません。
そこで、三角形が重なっているか判定し、重なっていれば 0
を出力します。
2 つの三角形が重なっているとき、片方の辺ともう片方の辺が重なっています。 互いの辺について重なっていないか 通り試すことで判定することができます。