これまでに行ったことを考慮した単純なアルゴリズム:
- すべてのシェイプについて、すべての頂点を配列(またはリスト)に、シェイプに表示される順序で格納します(時計回りまたは反時計回りでは違いはありません)。これにより、任意のオブジェクトのエッジを簡単に反復できます。これは、エッジがその場合(P 1、P 2)、(P 2、P 3)、... (P N、P 1)であるためです。ここで、Nは数値です。頂点の。
- オブジェクトと衝突するかどうかを確認するすべての線について、指定したすべてのエッジを反復処理し、チェックする線がいずれかのエッジと交差するかどうかを確認します。線は特定のオブジェクトと衝突します。
ラインとエッジの交差をチェックすることは、ジオメトリの問題です。チェックしている線の境界点がP1 =(x 1、y 1)およびP 2 =(x 2、y 2)であり、エッジの境界点がP 3 =(x 3、y 3)およびPである場合4 =(x 4、y 4)次に、線形システムを解く必要があります。
(x 2 -x 1)y +(y 1 -y 2)x = x 1 y 2 -x 2 y 1、
(x 4 -x 3)y +(y 3 -y 4)x = x 3 y 4 --x 4y3。 _ _
(x、y)の値を取得したら、両方の線(チェックしている線とエッジ)の境界点の間の部分にあることを確認する必要があります。それが本当なら、あなたの線は互いに交差します。
注:衝突をチェックするときにすべてのオブジェクトのエッジを反復処理するのではなく、ラインのパスにあるオブジェクトのみを反復処理することで、実行時間を改善できます。これは、たとえば、すべてのオブジェクトを含む最小の長方形を計算し、線が長方形を通過するかどうかをチェックし、オブジェクトが通過しないかどうかをさらにチェックしないようにすることで実現できます。