用一行代码判断两矩形是否相交
时间:2019-12-19
本文章向大家介绍用一行代码判断两矩形是否相交,主要包括用一行代码判断两矩形是否相交使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
typedef struct { int left; // leftmost: 最左 int top; // topmost: 最上 int right; // rightmost: 最右 int bottom; // bottommost: 最下 // 其实两个点的组合,表达的是边界的概念 // 分别为: // 左边界,右边界 // 上边界,下边界 } Rect; bool isRectOverlap(const RECT& r1, const RECT& r2) { return !( ((r1.right < r2.left) || (r1.bottom > r2.top)) || ((r2.right < r1.left) || (r2.bottom > r1.top)) ) }
两矩形相交”的对立事件(“两矩形不相交”比较容易表达(包含的情况数较少),最后对对立事件取非即可:
比如两矩形分别为r1和r2:
则两者不相交的情况为:r1在r2的左侧或上侧(同理,r2在r1的左侧或上侧),这里就要用到C结构体提供的界的概念了,也即r1的最右在r2最左的左侧,r1的最小在r2的最上的上侧。
((r1.right < r2.left) || (r1.bottom > r2.top))
((r2.right < r1.left) || (r2.bottom > r1.top))
不妨我们再对解决本题的思路“对立事件”的含义略作说明:
对立事件(Complementary event,直译为互补事件)
P(Ac)=1−P(A)
P(Ac)=1−P(A)
更像是常说的“非此即彼”,也即整个样本空间(sample space)中,事件P(A)P(A)与其对立事件 P(Ac)P(Ac),构成全部样本空间,放在本例也即,样本空间为:两矩形在平面上的组合形态,事件为:相交,则其对立事件自然为:不相交。
注意,正如 typedef struct rect 的四个成员变量所限制的那样,本文无法解决平面中不规则放置的矩形之间的关系。
https://blog.csdn.net/lanchunhui/article/details/50547837
原文地址:https://www.cnblogs.com/2018shawn/p/12066047.html
- CListBox
- 如何在Eclipse中添加Tomcat的jar包
- c++---函数
- Ruby对象模型总结
- Elasticsearch 管理文档
- Elasticsearch聚合 之 Ip Range IP地址范围聚合
- Elasticsearch聚合 之 DateRange日期范围聚合
- 域名投资大佬Mike Mann以约19.5万美金出售加密货币相关域名
- Elasticsearch聚合 之 Range区间聚合
- Elasticsearch集群管理
- 图m着色问题
- Elasticsearch入门介绍
- Elasticsearch聚合 之 Histogram 直方图聚合
- Elasticsearch聚合 之 Date Histogram聚合
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Docker私有镜像仓库是什么?
- React Native布局详细指南
- 走进Golang之Context的使用
- 「Workshop」第十一期:降维
- 开始在 GitHub 上写博客
- 微信公众号菜单点击发送天气预报
- SAP CRM Fiori应用如何启用Sales Office和Sales Group两个字段
- 通过注册表调整 Windows 8 窗口边框宽度
- 在 Mac OS X 中创建和使用内存盘
- Mono for Android 下的 ListActivity
- 使用JavaScript Function.prototype进行代码重构的一些例子
- Activity 生命周期及其栈管理方式
- 如何操作SAP UI5应用Footer区域工具栏按钮的背景颜色
- 我的第一个 Mono for Android 应用
- 【DB笔试面试851】在Oracle中,造成“ORA-28040: No matching ...”错误的原因是什么?