计算机与数学 —— 检测圆与矩形相交的快速判定算法

这篇博客介绍了如何快速检测圆与矩形是否相交的算法。


算法介绍

首先,对于矩形来说,将坐标系原点移到矩形的中心,并且将从原点到第一象限的顶点的向量 a 求出来。
Image1

其次,无论圆心E在哪一个象限,都将其通过轴对称转换到第一象限,并且求出原点到转换后的圆心 E 的向量 b
Image2

接下来是最关键的一步:算出A E 的向量 c ,并且把向量c中的负值全部置为0,得到最终的向量 c

  • 两个分量都大于0

Image3

  • x值小于0

    Image4

    • y 值小于0

    Image5

    x y 都小于0时,最终的向量为(0,0)

    因此最终只要比较半径 r 与向量c的模长的大小即可,如果需要在代码中实现,则无需开方。

    • 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与球形是否相交,则可以依次算法类推至三维的判定。

    这类问题通常都可以转化为闵可夫斯基和的问题,传送门

  • 15
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值