简单地判断判断两矩形相交/重叠 C#
最近需要用到矩形相交算法的简单应用,所以特地拿一个很简单的算法出来供新手参考,为什么说是给新手的参考呢因为这个算法效率并不是很高,但是这个算法只有简简单单的三行。程序使用了两种方法来判断是否重叠/相交,如果有兴趣可以看一下,如果觉得有bug可以留言。代码仅供参考。
C#中矩形的方法为Rectangl(起始点坐标, 矩形的大小)或Rectangl(起始点x坐标, 起始点y坐标, 矩形宽, 矩形高),起始点为矩形区域的左上角。
方法一
姑且叫做“井字法”吧,延长其中一个矩形的四边使其形成一“井”字(如图)并划分成九块区域,分区域来判断另一个矩形的点是否在此矩形内。
1.当生成的矩形的起始坐标点在3,6,7,8,9区域时,所生成的矩形必定不相交;
2.当生成的矩形起始点坐标在1,2,4区域时候,保证新矩形的右下角点的x坐标小于待比较矩形起始点的x坐标 或 新矩形的右下角点的y坐标小于待比较矩形起始点的y坐标 即可;
3.当生成的矩形位于5区域内时,只要保证新矩形右下角点的x和y坐标小于待比较矩形右下角点的x和y坐标即可;
4.在考虑两矩形是否重叠时不需要考虑第3条,当需要考虑是否内含时需要用第3条判断。

参考代码:
int flag = ; //设置标记值,默认为重叠
if (rectangle1.X > rectangle2.X + rectangle2.Width || rectangle1.Y > rectangle2.Y + rectangle2.Height) flag++; //初始点在3,6,7,8,9区域
else if (rectangle1.X + rectangle1.Width < rectangle2.X || rectangle1.Y + rectangle1.Height < rectangle2.Y) flag++; //初始点在1区域
else if (rectangle1.X > rectangle2.X && rectangle1.Y > rectangle2.Y && rectangle1.X + rectangle1.Width < rectangle2.X + rectangle2.Width && rectangle1.Y + rectangle1.Height < rectangle2.Y + rectangle2.Height) flag++; //初始点在5区域 if (flag == ) textBox1.Text = "重叠";
else textBox1.Text = "不重叠";
结果演示:



方法二
这个就简单多了,直接使用IntersectsWith方法直接可以判断是否重叠,是不是简单多了?但是它只能判断两个矩形是否重叠,内含的情况也算在重叠之内,需要使用此方法时可以考虑方法一。
if (rectangle1.IntersectsWith(rectangle2)) textBox1.Text = "重叠";
else textBox1.Text = "不重叠";
结果演示:


后记
此代码没有详细考虑边界相切问题,需要需要读者再加以考虑修改,也仅仅是提供新手一些思路或来考虑更复杂的推广应用,同时附源代码于文末供参考。另外时间、水平有限,代码难免有些小问题望读者海涵。
源代码:https://files-cdn.cnblogs.com/files/shenyuanfeng/RectangleIntersect.zip
简单地判断判断两矩形相交/重叠 C#的更多相关文章
- POJ 1410--Intersection(判断线段和矩形相交)
Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16322 Accepted: 4213 Des ...
- poj 1410 Intersection (判断线段与矩形相交 判线段相交)
题目链接 Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12040 Accepted: 312 ...
- G - Intersecting Rectangles Kattis - intersectingrectangles (扫描线)(判断多个矩形相交)
题目链接: G - Intersecting Rectangles Kattis - intersectingrectangles 题目大意:给你n个矩形,每一个矩形给你这个矩形的左下角的坐标和右上角 ...
- C:矩形相交、相包含、相离关系判断
矩形相交 包含 问题.参考 假定矩形是用一对点表达的(minx, miny) (maxx, maxy),那么两个矩形 rect1{(minx1, miny1)(maxx1, maxy1)} ...
- 判断圆和矩形是否相交C - Rectangle and Circle
Description Given a rectangle and a circle in the coordinate system(two edges of the rectangle are p ...
- You can Solve a Geometry Problem too (hdu1086)几何,判断两线段相交
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...
- poj 1127:Jack Straws(判断两线段相交 + 并查集)
Jack Straws Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2911 Accepted: 1322 Descr ...
- poj1410(判断线段和矩形是否相交)
题目链接:https://vjudge.net/problem/POJ-1410 题意:判断线段和矩形是否相交. 思路:注意这里的相交包括线段在矩形内,因此先判断线段与矩形的边是否相交,再判断线段的两 ...
- hdu 1147:Pick-up sticks(基本题,判断两线段相交)
Pick-up sticks Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
随机推荐
- Factorization Machine算法
参考: http://stackbox.cn/2018-12-factorization-machine/ https://baijiahao.baidu.com/s?id=1641085157432 ...
- Python从零开始——列表List
一:Python列表知识总览 二:列表操作符 三:Python内置函数操作列表 四:Python列表封装函数
- lua 的 cjson 安装,使用
1. 背景: 虚拟机安装的luajit 没有 cjson 库,就不能对 table 进行 编码操作,手动安装一个. 2. 安装: cjson下载地址:http://www.kyne.com.au/~ ...
- Centos 7 下yum搭建lnmp环境(yum安装方式)
我们都知道linux下安装软件主要有三种方式: 1.源码编译安装,即下载软件源代码,利用gcc g++ make 等编译工具进行编译安装: 此方式的优点:可以指定软件版本,可选择性好:编译时可以手动指 ...
- SpringMVC Junit Demo
package com.zchx.test; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.L ...
- Ubuntu下部署Portainer管理docker
在上一篇文章中,我们部署了Shipyard来管理docker集群,总体比较简单,而且Shipyard界面风格很简约,还是比较喜欢的,但是正如提出的node节点无法显示bug,以及该项目早已停止维护,让 ...
- CF704D Captain America(上下界网络流)
传送门 题意: 二维平面给出\(n\)个点,现在可以给每个点进行染色,染红色的代价为\(r\),染蓝色的代价为\(b\). 之后会有\(m\)个限制,形式如:\(t_i\ l_i\ d_i\),当\( ...
- java中判断两个对象是否相等
package ceshi.com.job; import java.util.ArrayList; import java.util.Arrays; import java.util.List; p ...
- TCP四次握手断开连接(十一)
建立连接非常重要,它是数据正确传输的前提:断开连接同样重要,它让计算机释放不再使用的资源.如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪 ...
- JDOJ 2225 工资计划
JDOJ 2225: 工资计划 https://neooj.com/oldoj/problem.php?id=2225 Description 高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零 ...