如何检查两个旋转的矩形之间的交点? [英] How to check intersection between 2 rotated rectangles?

查看:156
本文介绍了如何检查两个旋转的矩形之间的交点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以解释如何检查一个旋转的矩形是否与另一个矩形相交吗?

Can someone explain how to check if one rotated rectangle intersect other rectangle?

推荐答案

  1. 对于两个多边形中的每个边,请检查是否可以将其用作分隔线.如果是这样,那么您就完成了:没有路口.
  2. 如果未找到分隔线,则说明您有一个相交点.

/// Checks if the two polygons are intersecting.
bool IsPolygonsIntersecting(Polygon a, Polygon b)
{
    foreach (var polygon in new[] { a, b })
    {
        for (int i1 = 0; i1 < polygon.Points.Count; i1++)
        {
            int i2 = (i1 + 1) % polygon.Points.Count;
            var p1 = polygon.Points[i1];
            var p2 = polygon.Points[i2];

            var normal = new Point(p2.Y - p1.Y, p1.X - p2.X);

            double? minA = null, maxA = null;
            foreach (var p in a.Points)
            {
                var projected = normal.X * p.X + normal.Y * p.Y;
                if (minA == null || projected < minA)
                    minA = projected;
                if (maxA == null || projected > maxA)
                    maxA = projected;
            }

            double? minB = null, maxB = null;
            foreach (var p in b.Points)
            {
                var projected = normal.X * p.X + normal.Y * p.Y;
                if (minB == null || projected < minB)
                    minB = projected;
                if (maxB == null || projected > maxB)
                    maxB = projected;
            }

            if (maxA < minB || maxB < minA)
                return false;
        }
    }
    return true;
}

有关更多信息,请参见本文: 2D多边形碰撞检测-代码项目

For more information, see this article: 2D Polygon Collision Detection - Code Project

注意::该算法仅适用于以顺时针或逆时针顺序指定的凸多边形.

NB: The algorithm only works for convex polygons, specified in either clockwise, or counterclockwise order.

这篇关于如何检查两个旋转的矩形之间的交点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆