X

判断矩形相交

判断两个矩形是否相交,以及相交区域有好多中方式来判断,今天去看Unity的源码,发现Unity中Rect.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 

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

public bool Overlaps(Rect other)
{
    return (other.xMax > xMin &&
        other.xMin  yMin &&
        other.yMin 

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

This website uses cookies.