本当に唯一の楽しいプロジェクトに取り組んでいたのですが、何か問題が発生しました。異なるオブジェクト間の衝突を検出するアルゴリズムをどのように提示しますか?
Round Balls、Pointy Triangles、Skinny Lines(その他の野生動物も多分)の2D世界があります。それらはすべてWorldCreaturesのサブクラスです。彼らはこの世界の中で動くことができます。彼らがお互いに会うと、衝突が起こります。
私がしたいことは、それらの間の衝突を検出する方法を作ることです。ここに私が今立っていることがあります:
- ボールボールは簡単ですが、私は自分の位置からの距離を計算し、それらの「サイズ」の合計と比較します。
- 世界のボールとエッジの衝突も簡単です - デカルト座標での距離は簡単ですが、それは単純です。
- もっと一般的な問題は、Line(いくつかの点で開始点と終了点)や他のオブジェクトとの衝突を検出する方法です。ラインとポイントの間の距離があまりにも簡単に計算しますが、どのような私が好きなことは、オブジェクト
A
は、オブジェクトB
と衝突した場合に言うこと
一般的な方法のいくつかの種類を持っていることができます。それが今であるように、コードはいくらかのようになります。
class WorldCreature:
def detectCollision(self, otherObject):
# do something
if collision:
self.onCollision(otherObject)
otherObject.onCollision(self)
class Ball(WorldCreature):
# someing here
class Line(WorldCreature):
# someing here
今、衝突検出mechanizmは、オブジェクトが衝突することができるかに依存する必要があります。効果もそうです。
メモリ内のすべてのオブジェクトのリストを保持して、すべてをの各ステップで繰り返す必要がありますか?ステップですか?または、このタスクのパフォーマンスを改善するためのより良い方法がありますか?
+1を開始するには良い場所ですhttp://realtimerendering.com/intersections.html をご覧ください。別の質問は、実際の衝突や交差点を検出したいかどうかです。実際の衝突はあなたの形を掃除する必要があります。 – BigSandwich