オブジェクトの衝突点の座標を求めるためのヒント

これは2023/12/12のMK社内LTで発表した内容です。

はじめに

オブジェクトの当たり判定では、物体同士の重なりを検出する方法が有名です。しかし、重なりの判定だけでは衝突した箇所の座標を求めることができませんので、本記事では下図のように移動する四角形と静止している三角形の衝突点を考えていきます。

四角形と三角形

オブジェクトの頂点の軌道と衝突先の辺の交点

まず考えられるのは下図のように、図形の各頂点と衝突先の図形の辺の交点を求める方法です。最も近い交点を求めることで、図形同士の衝突点がわかります。

頂点軌道と辺の交点

しかし、この方法には以下のような問題があります。

衝突先の突起にめり込む

下図では視覚的に三角形の右端に衝突しそうですが、四角形の頂点の軌道は斜辺とのみ交わるためここを衝突点とすると、四角形が三角形にめり込んでしまいます。

めり込み

3D図形に応用できない

また、下図のように手前の直方体が奥の直方体に向かって移動する場合、手前の直方体の頂点がいずれも奥の図形の面や内部と交わらないため、衝突点を求めることができません。

3D

先述の手法の改良

以上の問題を踏まえ、改良した手法で下図の図形同士の衝突点を求めます。

四角形と三角形

まず、四角形の頂点の軌道に着目します。この手法ではどこの頂点でも良いので左下の頂点の軌道を使います。

左下の頂点の軌道

次に移動する四角形を衝突先の三角形の周りに沿って一周させた図形を考えます。すると下図のように四角形の軌道は緑のエリアで表され、また四角形の左下頂点の軌道は赤枠で表されます。

三角形周囲の左下の軌道

後は、頂点の赤枠の軌道と移動時の青い軌道の交点が、図形同士が衝突した時の四角形の左下頂点の座標となります。

衝突点の結果

この記事をシェア

弊社では、一緒に会社を面白くしてくれる仲間を募集しています。
お気軽にお問い合わせください!