0

rects1 = {x, y, w, h}と別の rectss2 = {x, y, w, h}と vectorを与えv = {x, y}ます。s1そしてに従って移動したと仮定してv、重なっているかどうかを確認したいと思います。

私はこのアルゴリズムを持っています:

isOverlapping = not (s1.x + s1.w + v.x < s2.x
or s1.x + v.x > s2.x + s2.w
or s1.y + s1.h + v.y < s2.y
or s1.h + v.y > s2.y + s2.h)

しかし、正しく動作していないように見えますが、まったく理解していないため、何が問題なのかさえ言えません。そして、その性質上、私はそれをより小さな断片に分解することさえできないようです.

isOverlapping = not (right_edge_of_s1_plus_move < left_edge_of_s2
or left_edge_of_s1_plus_move > right_edge_of_s2
or top_edge_of_s1_plus_move < bottom_edge_of_s2
or bottom_edge_of_s1_plus_move > top_edge_of_s2)

isOverlapping = not (s1_overlaps_s2_on_left_edge
or s1_overlaps_s2_on_right_edge
or s1_overlaps_s2_on_bottom_edge
or s1_overlaps_s2_on_top_edge)

これは、s1 が一方のエッジで s2 にオーバーラップするとすぐにオーバーラップしないことを意味します...何ですか?

奇妙なことに、私のプログラムでは、s1 が s2 の下に移動しようとしたときにのみ機能しません。他のすべてが機能します。

私の質問は次のとおりです。2 つの移動するボックスが互いに重なっている場合 (AABB) をテストするための正しいアルゴリズムは何ですか?また、ここにはどのようなアルゴリズムがありますか? どこかから入手したことは知っていますが、ソースが見つかりません。追加の移動ベクトルを追加しました。

4

1 に答える 1