2012-05-01 10 views
1

私は、分離軸定理を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 

Separating axis translation

私はR2対R1をチェックすると、翻訳は3 私は翻訳も3

なりますR1対R2をcheclされる場合は、今私は、正規化に翻訳を追加軸

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)を移動する必要があります。

正しい方向を計算するにはどうすればよいですか?

答えて

0

私のソリューション:私がテスト軸に内積を構築し、ドット積が0

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

Vector R1toR2 = centerR2 - centerR1; 

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

「すると、その後も小さい場合、翻訳を反転、中央ベクトルR2から中心ベクトルR1をsubstract

ベクトル(R1toR2)は負の方向を指し、逆変換を反転する "

関連する問題