2

SAT の最小変換ベクトルは、すべての場合において常に正確で正確ですか? 考えられるすべての軸を反復して計算し、それぞれのオーバーラップをチェックしてから、オーバーラップが最も短い軸を追跡し、それを貫通ベクトルとして使用します。

ご覧のとおり、最小平行移動ベクトルの一部の計算は常に正しいとは限りません。

この短い抜粋で、侵入ベクトルを見つけました。何が問題なのかを発見するのを手伝ってください。

        direction = Vector.Sub(me.Verts[k-1], me.Verts[k])
        axis      = Vector.Normalize(Vector.Perp(direction))

        min_1, max_1 = Vector.Project(me, axis)
        min_2, max_2 = Vector.Project(ent, axis)

        if (max_1 < min_2 or max_2 < min_1) == False:
            if ((max_2 - min_1) or (max_1 - min_2)) < first_separation[0]:
                if max_2 - min_1 < max_1 - min_2:   
                    first_separation = [max_2 - min_1, axis]
                else:
                    first_separation = [max_1 - min_2, axis]

他の場所では、次のコード行を使用してベクター値を取得します。

separator, axis = first_separation
vec = [axis[0] * (separator * -1), axis[1] * separator * -1]
4

1 に答える 1