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

news2024/12/27 10:43:50

0x00 Preface

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

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

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

image.png

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

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,它给出的正是这种思路,如下图:

image.png

0x02 Conclusion

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

0x03 The Last

最后,关注公号“ITMan彪叔” 可以添加作者微信进行交流,及时收到更多有价值的文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

618有哪些数码好物值得买?2023年618数码好物必买清单

618作为年中大促节点&#xff0c;很多的产品会迎来历史最低价&#xff0c;正是入手数码产品的最佳时间点。很多人在选择物品时难免会产生618有哪些数码好物值得买的疑惑?为此&#xff0c;我也整理了一份618数码好物清单&#xff0c;都是一些实用性很强的数码好物&#xff0c;希…

【2023年高考作文】七套卷子全汇总及AI一分钟版本作答

2023年高考作文-全国甲卷 科技与时间 当今社会&#xff0c;科技已经成为人们生活的必需品。它给我们带来了很多便利与机遇&#xff0c;让我们能够更好地掌控时间。然而&#xff0c;我们回顾一下自己的生活&#xff0c;会发现我们似乎已经依赖了科技&#xff0c;甚至成为了时间…

django-vue-admin开源项目环境调试(靠谱)

一、源码地址 注意&#xff0c;一定要使用这个地址。&#xff08;使用其他地址下载下来的感觉代码缺失&#xff0c;踩了大坑&#xff09; django-vue-admin: 基于RBAC模型的权限控制的一整套基础开发平台&#xff0c;前后端分离&#xff0c;后端采用 djangodjango-rest-frame…

消防应急照明和疏散指示系统在某洁净医药的设计与应用

【摘要】&#xff1a;A100型消防应急照明和疏散指示系统具有集中控制&#xff0c;灵活度高和可靠性强等特点。系统采用17寸工业平板电脑&#xff0c;采用Windonws7系统&#xff0c;可支持联动报警、系统监控、故障报警、自检、备电、记录存储与查询、导光流、权限控制等多项功能…

30、js - Promise

一、Promise的3种状态: 1、作用&#xff1a;了解Promise对象如何关联的处理函数&#xff0c;以及代码执行顺序 2、一个Promise对象&#xff0c;必然处于以下几个状态之一&#xff1a; pending&#xff1a;初始状态&#xff0c;页面一旦调用Promise对象&#xff0c;Promise对象就…

Hive中的DDL操作

文章目录 Hive中的DDL操作一、数据库&#xff08;database&#xff09;相关操作1. 创建数据库1&#xff09;语法2&#xff09;案例 2. 查询数据库1&#xff09;展示所有数据库2&#xff09;查看数据库信息 3. 修改数据库1&#xff09;语法2&#xff09;案例 4. 删除数据库1&…

需求三重境

需求的三点-痛点、痒点、爽点 我早前也做过产品经理&#xff0c;做产品经理经常需要分析需求&#xff0c;而KANO模型是其中的一个模型。如果要进一步解读痛点、痒点、爽点&#xff0c;或者可以尝试从KANO模型的角度分析。 所谓的KANO模型&#xff0c;是东京理工大学教授狩野纪…

接口测试 —— 接口和接口文档概念

1、接口的概念 接口又叫API&#xff0c;全称application programming interface&#xff1a;应用程序接口&#xff08;规范&#xff09;&#xff0c;也就是我们经常会听说Web接口&#xff0c;APP接口。 详细说明&#xff1a; APP是一种基于C/S架构的应用程序&#xff0c;如抖音…

阿里高工珍藏版“亿级高并发系统设计手册(2023版)”面面俱到,太全了

高并发 俗话说&#xff1a;罗马不是一天建成的&#xff0c;系统的设计当然也是如此。 从原来谁都不看好的淘宝到现在的电商巨头&#xff0c;展现的不仅仅是一家互联网巨头的兴起&#xff0c;也是国内互联网行业迎来井喷式发展的历程&#xff0c;网络信号从 2G 发展到现在的 5…

苹果服务端通知v2处理(AppStore Server Notifications V2)

苹果服务端通知v2处理 关键词: App Store Server Notifications V2、Python源码、苹果订阅、JWS、x5c、JSON WEB TOKEN 背景 最近要接入苹果订阅功能&#xff0c;调研后发现订阅生命周期内的状态变更是通过苹果服务端通知返回的(什么时候普通内购也能加上减少掉单的概率)&am…

邮件营销技巧!不想被打入冷宫?这五点让你的邮件不再进垃圾箱

邮件营销凭借其低成本、高效率的优势渐渐地在各个行业开始崭露头角。它既适用于外贸行业来拓展客户、又适用于金融行业来和客户保持联系。除此之外&#xff0c;企业还可以用邮件营销来通知活动信息、产品上新信息等等。 不过&#xff0c;很多人在进行邮件营销的时候经常会遇到“…

说点理论-什么叫TED背景

TED背景的概念 指technology, entertainment, design在英语中的缩写,即技术、娱乐、设计的3个首字母缩定。 TED背景的投影最小为4米*4米,大的有IMAX宽影幕布来打投影。给人感觉为:非常技术、非常高大上、非常专业、非常Fashion。 因此,头部一些公司会专门对于非常重要类…

【STM32】STM32G4系列片内模拟器件-比较器的使用

STM32G4系列片内模拟器件-比较器的使用 1.前言2.CubeMX配置3.HAL库函数 1.前言 STM32G4系列内置了片内模拟比较器&#xff0c;为电机控制、电源监测等方面的应用提供了很大的便利。要使用片内比较器&#xff0c;只需使用STM32CubeMX进行简单配置即可。 2.CubeMX配置 首先&am…

不敲一个代码,10分钟做出数据可视化大屏,还不快来学?

大屏幕实时数据可视化解决方案? 简道云去年举办过一场“最美仪表盘”评选活动&#xff0c;在活动中我们收到了很多精美炫酷的仪表盘&#xff0c;而且这所有的数据可视化仪表盘都是“从业务中来”&#xff0c;“到业务中去”的。 下面举几个例子展示下&#xff1a; 所用工具…

一、kafka入门

Kafka入门 为什么要用消息中间件&#xff1f; 异步处理 场景说明&#xff1a;用户注册后&#xff0c;需要发注册邮件和注册短信。传统的做法有两种1.串行的方式&#xff1b;2.并行方式。 串行方式&#xff1a;将注册信息写入数据库成功后&#xff0c;发送注册邮件&#xff…

最强AIGC实战应用速成指南来了!14天掌握核心技术

‍‍OpenAI 创始人 Sam Altman 在近期采访中说到&#xff1a;" AI 是少有的被严重炒作之后&#xff0c;还被严重低估的东西。" 现在的 AI 几乎把互联网上所有的数据都学习了一遍&#xff0c;相当于一个世界知识的统一建模。在如此规模的参数量下&#xff0c;更好的关…

Java 集合全教程—List

Java 集合全教程_Doker 多克的博客-CSDN博客 Java 集合全教程—Set 接口_Doker 多克的博客-CSDN博客 一、概述 列表是一个有序的集合&#xff08;有时称为序列&#xff09;。列表可能包含重复的元素。除了从Collection继承的操作外&#xff0c;List接口还包括以下操作&#x…

Java抽象类介绍

1 问题 声明一个名为Employee的抽象类&#xff0c;其中包含name(姓名)和sex(性别)两个String类型的私有属性&#xff0c;并声明一个继承于Employee抽象类的子类Teacher。 2 方法 2.1 定义一个抽象类&#xff1a;Employee。 2.2 为Employee类设计一个抽象方法。 2.3实现抽象类Em…

vue对接海康摄像头,配合ifarme进行展示。给ifarme点击事件(消除ifarme事件,因为ifarme没有点击事件)

1、在public文件夹下建一个文件ifarme.index&#xff0c;和index.html同级。 <!doctype html> <html><head><title></title><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta http-equi…

【熬夜送书 | 第三期】清华社赞助 | 《Java系列丛书》

前言 Java作为一门主流语言&#xff0c;它与其他语言相比&#xff0c;有什么优势呢? Java 是一种广泛使用的高级编程语言&#xff0c;具有多项特性&#xff1a; 1.简单易学&#xff1a;Java 语言的语法与 C 相似&#xff0c;但删掉了复杂的指针、运算符重载等内容&#xff0…