その7 楕円と楕円の衝突:サンプルプログラム
衝突判定編2D衝突編その7「楕円と楕円の衝突」で説明した内容を踏まえたサンプルプログラムです。実行すると、青と緑の2つの楕円が出現します。これらの楕円はマウスでドラッグして衝突テストをする事ができます。
サンプルスクリーンショット。2つの楕円は大きさや回転角度を自由に変えられ、衝突すると赤色になります。
○ コンパイル方法
今回は衝突アルゴリズムがメインのためソースコードは記載しません。必要なファイルはこちらにあります。ファイルをダウンロードしたら、main.cpp、ColEllipse.hそしてColEllipse.cppを空のWin32アプリケーションに追加してコンパイルすれば実行できます。また実行形式も含めておりますので、動作確認だけしたい方はそちらをどうぞ。
○ プログラムで遊ぶポイント
楕円はマウスでつまむ事ができます。またCtrlキーを押しながらカーソルを動かすと楕円の大きさが変わります。Shiftキーは楕円を回転させます。双方の楕円は[1]キーと[2]キーで切り替わります。2つの楕円が衝突すると色が赤色に変わります。
今回紹介したアルゴリズムには近似が含まれております。近似の影響は楕円を細長くした時に顕著に現れるようです。また長径側の縁の判定がゆるくなります。しかし、実用には十分に耐えうるアルゴリズムだと思います。
衝突判定関数は沢山の変数を作っていますが、これはもう少し最適化が可能な感じはします。ただVC++のコンパイラは優秀なので、出来る限りの最適化をしてくれているかもしれません。パフォーマンスの重視が欲しい方は切り詰めてみて下さい。