判断矩形相交

发表评论 阅读评论

判断两个矩形是否相交,以及相交区域有好多中方式来判断,今天去看Unity的源码,发现Unity中Rect.Overlaps的实现比较简单快速,这里就把几种方式写以下。

rectangle-overlaps

两个矩形相交只会出现上面3中情况,可以看到它们相交与一个小矩形,而这个小矩形在那两个矩形的中间位置,再仔细观察相交区域矩形的4个点坐标。 (这里按Y方向向上来表示,计算结果和Y方向没关系)

  • xMin = 两个矩形的xMin的最大值
  • xMax = 两个矩形的xMax的最小值
  • yMin = 两个矩形的yMin的最大值
  • yMax = 两个矩形的yMax的最小值

这样 (xMin, yMin) (xMax, yMax) 这两个点组成的矩形就是相交区域

public bool Overlaps(Rect a, Rect b, out Rect overlapsArea)
{
    var min = Vector2.Max(a.min, b.min);
    var max = Vector2.Min(a.max, b.max);
    if (min.x < max.x && min.y < max.y)
    {
        overlapsArea = new Rect(min, max - min);
        return true;
    }
    overlapsArea = Rect.zero;
    return false;
}

现在再来看下Unity里怎么判断矩形相交的,只是Unity里没有返回相交区域。

public bool Overlaps(Rect other)
{
    return (other.xMax > xMin &&
        other.xMin < xMax &&
        other.yMax > yMin &&
        other.yMin < yMax);
}

是不是很简洁,如果不需要知道相交区域,还是用Unity版本更快些。

标签:

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
回到顶部