質問: 当たり判定のアルゴリズムを教えてください。 状況によって3角形、5角形、9角形、●角形・・・ というような不定形なオブジェクトの当たり判定のアルゴリズムは どのようにすればよいでしょうか?
回答: この手の判定をきちんとする場合は、幾何学系の計算が必要になってきます。 no1さんの仰るように、ゲームなど高速かつ簡易的に判定するのであれば、四角形同士のあたり判定がよいでしょう。 四角形同士は r1.left < r2.right && r1.right > r2.left && r1.top < r2.bottom && r1.bottom > r2.top で判定できます。 もし多角形や円などさまざまな形同士であたり判定するならば、それぞれの形状同士のあたり判定(交差・オーバーラップ)を実装しなくてはいけません。 具体的なコードを書くと長いので、アドバイスとして以下のようなクラスを作ってみてはいかがでしょう? class line_seg { public: bool hittest (const line_seg &); bool hittest (const polygon &); bool hittest (const circle &); }; class polygon { public: bool hittest (const line_seg &); bool hittest (const polygon &); bool hittest (const circle &); }; class circle { public: bool hittest (const line_seg &); bool hittest (const polygon &); bool hittest (const circle &); }; あと、多角形同士の判定の場合、線分の交差判定のみでは、内包されるようなパターンの時にだめですので、気をつけてください。