最近需要用到矩形相交算法的简单应用,所以特地拿一个很简单的算法出来供新手参考,为什么说是给新手的参考呢因为这个算法效率并不是很高,但是这个算法只有简简单单的三行。程序使用了两种方法来判断是否重叠/相交,如果有兴趣可以看一下,如果觉得有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#的更多相关文章

  1. POJ 1410--Intersection(判断线段和矩形相交)

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16322   Accepted: 4213 Des ...

  2. poj 1410 Intersection (判断线段与矩形相交 判线段相交)

    题目链接 Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12040   Accepted: 312 ...

  3. G - Intersecting Rectangles Kattis - intersectingrectangles (扫描线)(判断多个矩形相交)

    题目链接: G - Intersecting Rectangles Kattis - intersectingrectangles 题目大意:给你n个矩形,每一个矩形给你这个矩形的左下角的坐标和右上角 ...

  4. C:矩形相交、相包含、相离关系判断

    矩形相交 包含 问题.参考 假定矩形是用一对点表达的(minx, miny) (maxx, maxy),那么两个矩形    rect1{(minx1, miny1)(maxx1, maxy1)}    ...

  5. 判断圆和矩形是否相交C - Rectangle and Circle

    Description Given a rectangle and a circle in the coordinate system(two edges of the rectangle are p ...

  6. 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 ...

  7. poj 1127:Jack Straws(判断两线段相交 + 并查集)

    Jack Straws Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2911   Accepted: 1322 Descr ...

  8. poj1410(判断线段和矩形是否相交)

    题目链接:https://vjudge.net/problem/POJ-1410 题意:判断线段和矩形是否相交. 思路:注意这里的相交包括线段在矩形内,因此先判断线段与矩形的边是否相交,再判断线段的两 ...

  9. hdu 1147:Pick-up sticks(基本题,判断两线段相交)

    Pick-up sticks Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

随机推荐

  1. GCN python 实现2:利用GCN进行节点分类

    参考:https://www.baidu.com/link?url=5oU-O_YQV8DdSTtRkgzsQ_vuwjJHyUOxqeAKhq98ZA5XtvKW8PNQwXgSlr5GpESRqh ...

  2. django-图形验证码(django-simple-captcha)

    在网站开发的登录页面中,经常会需要使用到图形验证码来验证.在Django中,django-simple-captcha库包提供了图形验证码的使用. django-simple-captcha的安装 p ...

  3. pytest生成allure报告

    在pytest框架中可以用很多插件来生成测试报告,本文总结下怎么生成allure报告 allure allure是一款开源的,专门用来展示测试结果的一个工具,allure可以与很多的测试框架做集成,比 ...

  4. Rust中的Slices

    这个slice切片,python中有,go中有, 但确实,Rust中最严格. 精彩见如下URL: Rust 程序设计语言(第二版) 简体中文版 · GitBook (Legacy) https://k ...

  5. Django简介(MVC、MTV)

    Django简介 MVC Model(模型)- 应用程序中处理数据逻辑部分且与数据库交互,用于存取数据的部分 View(视图)- 用于处理后的数据界面展示,且视图通常是由模型数据创建的,是用户看到并与 ...

  6. Fishing Master (思维+贪心)

    题目网站:http://acm.hdu.edu.cn/showproblem.php?pid=6709 Problem Description Heard that eom is a fishing ...

  7. 关于git设置多个账号的问题,ideal中clone项目

    一.排坑 1.ping github.com超时.修改C:\Windows\System32\drivers\etc的hosts文件,添加 # GitHub地址 192.30.255.112 gith ...

  8. 求数组前K个大的数

    我们举例,假若从10000万个数里选出前100个最大的数据. 首先我们先分析:既然要选出前100个最大的数据,我们就建立一个大小为100的堆(建堆时就按找最大堆的规则建立,即每一个根节点都大于它的子女 ...

  9. 日常歌颂zyj

    今年的中秋节... 我貌似遇到了一个灰常 灰常灰常优秀的 大哥哥~~ (貌似是条高二狗) 最开始在贴吧颓废... 然后... 开始逐条的回复... 开始去,,, 逐步查看,,, 发现这个优秀的楼主会 ...

  10. CSP2019蒸馏记

    Day -\(\infty\) ~ Day -2 认真准备联赛. Day -1 复习模板,全真模拟比赛平衡树 下午进行了湖南大学 2 小时游. Day 0 上午睡过头了 下午日常训练,并没有什么开放日 ...