判断两个矩形是否相交(Rect Intersection)

这篇具有很好参考价值的文章主要介绍了判断两个矩形是否相交(Rect Intersection)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0x00 Preface

最近在开发一个2D组态图形组件的过程中,里面的数学模块,涉及到两个矩形是否相交的判断。

这个问题很多年前就写过,算是个小的算法吧。

网络上搜索一下,有很多思路,有一些思路要基于多种组合的判断,显得比较复杂。 比如两个矩形相交的情形,可能有下面的多种类型:

判断两个矩形是否相交(Rect Intersection)

而每种类型又有多种子类型。

0x01 Body

其实可以反向来思考这个问题,就比较简单,两个矩形A和B,不相交的情况有哪些,然后通过bool 取反,就是相交的情况。
假设矩形的的定义如下:

class Rect {
    constructor(x,y,w,h) {
      this.x = x;
      this.y = y;
      this.w = w;
      this.h = h;
      
      this.r = x + w; // r表示矩形的右边
      this.b = y + h; // b 表示矩形的下边
    }
}

不相交的情况可以归纳为这几种情况:

  • A在B的左边 (A.r < B.x)
  • A在B的右边 ( B.r < A.x)
  • A在B的上边 (A.b < B.y )
  • A在B的下边 (B.b < A.y )

所以不相交的代码如下:

A.r < B.x || B.r < A.x || A.b < B.y || B.b <A.y

对于这种情况取反,就是相交的情况:

!(A.r < B.x || B.r < A.x || A.b < B.y || B.b <A.y)

取反之后 或变与:

A.r >= B.x && B.r >= A.x && A.b >= B.y && B.b >= A.y

尝试着问下ChatGPT,它给出的正是这种思路,如下图:

判断两个矩形是否相交(Rect Intersection)

0x02 Conclusion

  • 有时候反过来思考问题,是一种很好的思路
  • ChatGPT 牛逼。

0x03 The Last

最后,关注公号“ITMan彪叔” 可以添加作者微信进行交流,及时收到更多有价值的文章。文章来源地址https://www.toymoban.com/news/detail-475537.html

到了这里,关于判断两个矩形是否相交(Rect Intersection)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算几何】判断一条线段和一段圆弧是否相交 & C++代码实现

    最近做项目,需要判断一条线段是否和一段圆弧相交,网上也没找到很好的解答(最主要是没有直接可以搬来用的代码,或者思路写得太过高深,我看不懂),于是决定自己想一个方法,写一个博客,将实现思路和完整代码都分享出来 线段可用两个点表示,点的对象如下所示

    2024年02月01日
    浏览(81)
  • java 判断两个List是否包含 判断两个list相等

    java 判断两个List是否包含 判断两个list相等 https://blog.51cto.com/u_12855/7333853 1、直接使用equals()比较 众所周知,两个列表具有完全相同的元素并且具有完全相同的顺序时,它们是相等的。因此, 如果我们业务要求两个list顺序一致,可以使用equals()方法进行相等性检查: 即使

    2024年02月04日
    浏览(66)
  • processing判断一个点是否在三角形、圆、椭圆、矩形内(超详细鼠标交互)

    刚好最近在学processing,然后有不少同学遇到一个问题哈, 就是如何用processing判断一个点是否在三角形、圆、椭圆、矩形内,并且联合arduino一起,通过串口通信实现用户在processing发生点击事件,然后通过arduino开发板反馈(亮灯等等) ,这一期我就先出如何解决利用processi

    2023年04月10日
    浏览(42)
  • 判断两个数组是否相等

    在判断两个数组是否相等之前,我们应该弄清楚数组怎样才算相等,官方给的解释是这样的: Returns true if the two specified arrays of ints are equal to one another. Two arrays are considered equal if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal. In other

    2024年02月15日
    浏览(62)
  • 判断两个vector数组是否相等

    判断两个vector数组是否相等是可以直接使用==或者!=的 因为vector内部都进行了相关运算符的重载,还可以进行比较大小 下面这道简单搜索题就用到了这个性质,浅看一下吧 【问题描述】给定一个n个整数的集合X={x1,x2,…xn}(X中可能包含重复元素)和整数y,找出和等于y的X的子集

    2024年02月12日
    浏览(64)
  • Js如何判断两个数组是否相等?

    日常开发,时不时会遇到需要判定2个数组是否相等的情况,需要实现考虑的场景有: 先判断长度,长度不等必然不等 元素位置 其他情况考虑 \\\'1\\\' 和 1 (Object的key是字符串, Map的key没有限制) NaN null 和 undefined 数组自带的方法,比较适合的有: every、some、filter、findIndex 。 这种

    2024年02月22日
    浏览(68)
  • 判断两个时间段是否有交集

    前言:项目中遇到了类似会议室预约的时间段被占用,预约车辆时间段被占用等。 start:预约开始时间。 end:预约结束时间。 必备条件:start = end 思考🤔: 怎么判断是否被占用呢? 预约的时间,与目标数据库中任意一条的存在交集,则可以视为占用。 有交集的情况有那几

    2024年02月03日
    浏览(67)
  • 如何判断两个随机变量是否独立,同分布

    独立两个判断条件 1,设(x,y)的密度函数为f(x,y),其定义域是矩形区域。联合密度函数的区域必须为矩形区域,这很重要。可以证明一波,若x的范围为(0,1),y的范围为(3,5)如果他们相互独立,那么组成的联合密度函数,每一个x,都可以对应所有的y,所以组成的范围为矩

    2024年02月11日
    浏览(60)
  • 记录--如何判断两个数组的内容是否相等

    给定两个数组,判断两数组内容是否相等。 不使用排序 不考虑元素位置 例: 思考几秒:有了😀😀 直接遍历第一个数组,并判断是否存在于在第二个数组中 求差集, 如果差集数组有长度,也说明两数组不等(个人感觉比上面的麻烦就不举例了) 细心的小伙伴就会发现:N

    2024年02月08日
    浏览(157)
  • Go语言如何判断两个对象是否相等

    在编程中,判断两个对象是否相等是一项常见的任务,同时判断对象是否相等在很多情况下都非常重要,例如: 单元测试 :编写单元测试时,经常需要验证函数的输出是否符合预期,这涉及到比较对象是否相等。 数据结构操作 :在使用 map 等数据结构时,可能需要判断两个对

    2024年02月07日
    浏览(145)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包