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の回答に興味があるかもしれません。
私は今これを移植しました:http://www.asawicki.info/news_1376_calculating_aabb_of_a_rotated_2d_rectangle.htmlしかし、私はそれを動作させる方法を理解できません。 – annonymously
AABBの周りに何をしようとしていますか?それは長方形や円のような単純な形ですか、スプライトのような複雑なものですか? –
@David私は物理エンジンのために作る必要があります。それは私が私のゲームを作るときに私が望むものを網羅するものでなければならない。しかし、今のところ私は回転した長方形にしておきます – annonymously