判断矩形相交
判断两个矩形是否相交,以及相交区域有好多中方式来判断,今天去看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 < 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版本更快些。
» 转载请注明来源:www.litefeel.com » 《判断矩形相交》
» 本文链接地址:https://www.litefeel.com/rectange-overlaps/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/rectange-overlaps/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS