2011-12-23 6 views
1

私は2DコリジョンAABBをGoogle上に作成する方法が見つからなかったので、数学の計算方法が不思議でした。私はそれを達成するために何らかの行列変換を使うことができると思っていましたが、その考え方は叙述的に失敗しました。だから、基本的には、アングルアライメントされた境界ボックスを作成し、ポイントがそれと交差するかどうか、またはその数学と論理の説明を確認するのに役立つリソースを知りたいと思います。Pointがカスタム2D物理エンジン用にAABBと交差するかどうかをチェックする方法

編集:私はそれを明確にしたかどうか分かりませんが、私はそれらとの衝突をテストする必要があります。そのクリスタルをクリアにするだけです。

+0

私は今これを移植しました:http://www.asawicki.info/news_1376_calculating_aabb_of_a_rotated_2d_rectangle.htmlしかし、私はそれを動作させる方法を理解できません。 – annonymously

+0

AABBの周りに何をしようとしていますか?それは長方形や円のような単純な形ですか、スプライトのような複雑なものですか? –

+0

@David私は物理エンジンのために作る必要があります。それは私が私のゲームを作るときに私が望むものを網羅するものでなければならない。しかし、今のところ私は回転した長方形にしておきます – annonymously

答えて

1

2つの四角形の交差チェックでは、回転した四角形をチェックすることはできません。単純な交差関数としては機能しません。 "実際の"回転した矩形を含む矩形を計算し、その代わりに境界矩形の衝突をチェックする考え方。ここで

は別の長方形と回転行列変換に基づいて四角形を返しますいくつかのコードです:もちろん

public static Rectangle CalculateBoundingRectangle(Rectangle rectangle, Matrix transform) 
{ 
    // Get all four corners in local space 
    Vector2 leftTop = new Vector2(rectangle.Left, rectangle.Top); 
    Vector2 rightTop = new Vector2(rectangle.Right, rectangle.Top); 
    Vector2 leftBottom = new Vector2(rectangle.Left, rectangle.Bottom); 
    Vector2 rightBottom = new Vector2(rectangle.Right, rectangle.Bottom); 

    // Transform all four corners into work space 
    Vector2.Transform(ref leftTop, ref transform, out leftTop); 
    Vector2.Transform(ref rightTop, ref transform, out rightTop); 
    Vector2.Transform(ref leftBottom, ref transform, out leftBottom); 
    Vector2.Transform(ref rightBottom, ref transform, out rightBottom); 

    // Find the minimum and maximum extents of the rectangle in world space 
    Vector2 min = Vector2.Min(Vector2.Min(leftTop, rightTop), 
           Vector2.Min(leftBottom, rightBottom)); 
    Vector2 max = Vector2.Max(Vector2.Max(leftTop, rightTop), 
           Vector2.Max(leftBottom, rightBottom)); 

    // Return that as a rectangle 
    return new Rectangle((int)min.X, (int)min.Y, (int)(max.X - min.X), (int)(max.Y - min.Y)); 
} 

、衝突検出のこのタイプは高速だが正確ではありません。あなたの境界矩形は、あなたの形状の1:1表現ではありません。さらに正確さが必要な場合は、AABBで確認した後、ピクセルごとの衝突チェックを使用できます。

Thisあなたも、特にSATの回答に興味があるかもしれません。

+0

実際は、回転矩形と点の衝突を調べることに本当に関心がありました。回転矩形の周りに新しい境界ボックスを計算するのではなく、とにかく感謝しています。 – annonymously

関連する問題