这篇博客介绍了如何快速检测圆与矩形是否相交的算法。
算法介绍
首先,对于矩形来说,将坐标系原点移到矩形的中心,并且将从原点到第一象限的顶点的向量
其次,无论圆心
接下来是最关键的一步:算出
- 两个分量都大于0
-
x 值小于0
-
y 值小于0
因此最终只要比较半径
- 若
c<r ,则圆与矩形相交。 - 若
c=r ,则圆与矩形相切。 - 否则二者相离。
代码实现
bool Intersection(float2 c, float2 h, float2 p, float r)
{
float2 v = abs(p - c);
float2 u = max(v - h, 0);
return dot(u, u) < r * r;
}
思考
这种算法可以扩展至高维。例如需要判定Box与球形是否相交,则可以依次算法类推至三维的判定。
这类问题通常都可以转化为闵可夫斯基和的问题,传送门。