2

Javaで分離軸定理を実装しました。衝突検出自体はうまく機能します。しかし、衝突の解決に関しては行き詰まっています。

翻訳を取得する私の方法は次のようになります。

public float getOverlap(final Projection other) {
    float start = m_min > other.m_min ? m_min : other.m_min;
    float end = m_max < other.m_max ? m_max : other.m_max;
    float translation = end - start;
    return translation;
}

写真の 2 つの長方形の射影がこのように見えるとしましょう。

R1.min = 2
R1.max = 8
R2.min = 5
R2.max = 11

軸移動の分離

R1 対 R2 をチェックすると、変換は 3 になります R2 と R1 をチェックすると、変換も 3 になります

次に、正規化された軸に平行移動を追加します

Normalized axis = Vector(1,0)
Translation Vector = Vector(1,0)*3 = Vector (3,0)

そして、R1 と R2 はどちらも右に 3 ポイント移動しますが、異なる方向に移動するはずです。R1 は Vector(-3,0) を移動し、R2 は Vector(3,0) を移動する必要があります。

どうすれば正しい方向を計算できますか?

4

2 に答える 2

0

私の解決策:

中心ベクトルR2から中心ベクトルR1を減算し、テストされた軸に内積を作成し、内積が0よりも小さい場合は内積を反転します。

Vector centerR1(R1.x,R1.y);
Vector centerR2(R2.x,R2.y);

Vector R1toR2 = centerR2 - centerR1;

if(R1toR2.dot(axis)<0){
  translation = -translation
}

「ベクトル(R1toR2)が負の方向を指している場合、平行移動を反転します」

于 2012-05-01T18:08:27.450 に答える