矩形的相交问题也是一个常用的问题,最近碰到的有点多,连续碰到了三四题了,每次都要重新写,不如直接总结出来,直接写成一个板子,以后就能抄了;

目前只考虑没有角度的矩形相交

首先是矩形的相交问题:矩形的相交分为好几种相交:即

我们设两个矩形的点分别为:

第一个矩形A:ax1,ay1,ax2,ay2              第二个矩形B:bx1,by1,bx2,by2

方法一:

矩形相交的结果仍是矩形,因此构成相交矩形C的左下和右上就是:cx1,cy1,cx2,cy2;

cx1=max(ax1,bx1)         //左下x为最大的左下x集合

cy1=max(ay1,by1)         //左下y为最大的左下y集合

cx2=min(ax2,bx2)         //右上x为最小的右上x集合

cy2=min(ay2,by2)         //右上y为最小的右上y集合

如果两个矩形不相交,那么的出来的相交矩形C满足:(cx1>cx2)||(cy1>cy2),就是左下不是左下点了。

根绝这个方法,可以得出,1.矩形是否相交,2.相交的面积。

写成代码就是:

int get_sum(){//判断和求和一起出来if(cx1>cx2)return 0;if(cy1>cy2)return 0;return (cx2-cx1)*(cy2-cy1);
}

方法二:

两个矩形相交的条件:两个矩形的重心距离在x轴y轴上都小于两个矩形长或宽的一半之和。

就是判断:

重心距离在x轴上的投影长度<两个矩形的在x轴的长度之和/2

重心距离在y轴上的投影长度<两个矩形在y轴上的宽度之和/2

换成代码就是:

int judge(Rect r1,RECT r2){if(abs((r1.x1+r1.x2)/2-(r2.x1+r2.x2)/2)<((r1.x2+r2.x2-r1.x1-r2.x1)/2)&& abs((r1.y1+r1.y2)/2-(r2.y1+r2.y2)/2)<((r1.y2+r2.y2-r1.y1-r2.y1)/2))return 1;return 0;
}

多边形相交

参考评论区的一位聚聚的思路:

判断二维多边形相交 只需要判断

图形1有任意顶点在图形2的内部 || 图形2有任意顶点在图形1的内部

update2021-9-10补充思路(多边形相交):

在看评论的时候,突然想起,可以用半平面交的思路解决点在多边形内的判断问题.

结合之前的半平面交博客(计算几何基础--半平面求交 ))原博客中使用半平面交求多边形面积,我们可以修改一下,使用向量法,依次判断一个多边形的边是否在一个点的一侧.

例如下面的图(随手一画)

判断 多边形FGHI 是否在 多边形ABCDE 内,

Step1:选择点F

Step2:遍历边AB,BC,CD,DE,EA,用向量点乘判断是否在左边.

Step:如果点F都在多边形的左边,那么我们就能判断你点f在多边形ABCDE内,同理判断GHI点.

若点都在多边形内部,则说明 多边形FGHI 在 多边形ABCDE 内.

当然,这种思路只适合凸多边形,如果是凹的话,就会出现问题.

现在对于凹多边形还是没有思路.

判断矩形是否相交(包含,点相交,边相交)相关推荐

  1. 几何算法:矩形碰撞和包含检测算法

    大家好,我是前端西瓜哥.今天来讲讲几何算法中,比较经典的算法:矩形碰撞和包含检测算法. 矩形碰撞检测是被广泛使用的算法. 比如在游戏中,为了优化图形碰撞判断效率(复杂不规则图形之间的碰撞算法很复杂), ...

  2. c语言两个矩形相交部分坐标,C++判断矩形相交的方法

    本文实例讲述了C++判断矩形相交的方法.分享给大家供大家参考.具体如下: 已知2矩形原点和宽高,判断2矩形相交,相交矩形 相交判断原理: 假定矩形是用一对点表达的(minx, miny) (maxx, ...

  3. 判断矩形与矩形、圆、三角形的相交问题

    注:以下的矩形均为轴对齐矩形 1.矩形与矩形的相交判断 参考自: 力扣--矩形面积 力扣--矩形重叠 判断两个矩形是否相交最简单算法_程序员正茂的博客-CSDN博客_矩形相交算法 快速判断两个矩形是否 ...

  4. java set 包含_Java Set.contains()方法:判断Set集合是否包含指定的对象

    Java 集合类中的 Set.contains() 方法判断 Set 集合是否包含指定的对象.该方法返回值为 boolean 类型,如果 Set 集合包含指定的对象,则返回 true,否则返回 fal ...

  5. java 包含汉字,【转载】Java判断字符串中是不是包含汉字

    [转载]Java判断字符串中是否包含汉字 import java.util.regex.Matcher; import java.util.regex.Pattern; public class If ...

  6. java判断字符串中是否包含中文 过滤中文

    package com.test;import java.util.regex.Matcher; import java.util.regex.Pattern;public class Test {@ ...

  7. php html中的判断,php怎么判断字符串中是否包含html标签?

    php判断字符串中是否包含html标签的方法:首先使用"strip_tags"函数处理字符串:然后使用if语句判断处理后的字符串"str2"和原字符串" ...

  8. 在Java中如何高效的判断数组中是否包含某个元素

    如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...

  9. java怎么统计随机数出现次数,Excel统计出现次数、个数的VBA代码 java中怎么判断一个字符串中包含某个字符或字...

    延伸:java中怎么判断一个字符串中包含某个字符或字符 描述:...一个字符串中包含某个字符的单词说出现的次数 c#什么方法可以判断字符串中包含某个字符的个数? JAVA判断字符串数组中是否包含某字符 ...

最新文章

  1. centos7下selinux永久关闭
  2. plotly同时可视化表格与图(plotly Table and Chart )
  3. golang中的strings.Repeat
  4. 最佳实践丨构建云上私有池(虚拟IDC)的5种方案详解
  5. 【Linux笔记(000) 】-- 系统启动过程
  6. 未来Linux系统将是运维行业必备的技能之一
  7. C#.NET中数组、ArrayList和List三者的区别
  8. 利用Exchange 2003实现移动办公新体验
  9. lisp ssget 浩辰_ssget 详解
  10. Python收集新闻其他辅助功能的实现
  11. 6年java工作经验总结
  12. c语言幼儿园积木游戏,幼儿园积木游戏教案3篇
  13. CHD6.3环境中,集中kylin3.0,错误解决.NoClassDefFoundError: org/apache/commons/configuration/ConfigurationE
  14. 讯飞离线语音识别使用出现初始化失败的解决方法
  15. OpenGL 4.0 学习3.2--各种颜色的RGB值
  16. android parcel分析,android – 从Intent检索时Parcel崩溃
  17. mysql egt_ThinkPHP常用的运算符介绍eq|neq|gt|egt|lt|elt|heq|nheq
  18. 分享 40 个免费的前端初学者视频教程
  19. ElementUI的表格换行符失效、不换行
  20. 微信小程序:组件Component接收不到参数id

热门文章

  1. 新闻(project)之界面分页 and 评论功能
  2. RHEL8.0快速入门系列笔记--理论知识储备(一)
  3. mysql数据库备份与导入
  4. java -p_javap使用实例图解
  5. RFC2326 - Real Time Streaming Protocol (RTSP) 完整中英文对照版
  6. C语言基础——统计由键盘输入的一行字符中数字、字母与其他的个数
  7. 微博登录显示服务器解析失败怎么办,微博air登录失败, air无法登录的原因 -电脑资料...
  8. 有生之年,被FCoin坑到底?
  9. 7.跨段跳转,短调用和长调用堆栈图
  10. 视觉定位领域专栏(二)常用数据集介绍