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