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]