计算几何--判断平行坐标轴的2矩形是否有交集
2D平面内 如果有2个边分别平行于直接坐标轴的矩形a,b. 如果判断a,b是否有公共面积?
下面简单介绍2个方法
1.队友告诉的方法 可以很方便的计算出2矩形相交面积的大小
分别找到2个矩形右下角的坐标中最小的x(minx)和最小的y(miny)
在找到2个矩形左上角坐标中最大的x(maxx)和最大的y(maxy)
最后 相交的矩形即对角线[minx,miny]--[maxx,maxy]所构成的矩形 当然如果minx>maxx或miny>maxy矩形不相交
2.我以前使用的方法 根据两个矩形的中心相对位置来判断是否有交集
设2个矩形a,b的中心分别为oa ob(这个很容易求出) 通过作图很容易发现 如果2个矩形要有交集必须满足2个条件
oa ob横坐标距离<两矩形横边和/2 oaob纵坐标距离<两矩形纵边和/2 这个看上图很明显
所有有了以下函数 这2个方法都是O(1)时间内完成的
x1,y1--x2,y2 x3,y3--x4,y4 分别是2个矩形的对角线顶点坐标
方法一:
1 2 3 4 5 6 7 8 9 10 11 12 | /***************** Author:夏天的风 Function:To determine whether 2 paralleled rectangle share common area **** if (x1>x2) swap(x1,x2); if (y1>y2) swap(y1,y2); if (x3>x4) swap(x3,x4); if (y3>y4) swap(y3,y4); lx=max(x1,x3); ly=max(y1,y3); rx=min(x2,x4); ry=min(y2,y4); if (lx>rx||ly>ry) puts ( "0.00" ); else printf ( "%.2f\n" ,(rx-lx)*(ry-ly)); |
方法二:(整点,可以改写为浮点数)
1 2 3 4 5 6 7 8 9 | /************************ Author: lxglbk Function: To determine whether 2 paralleled rectangle share common area ******** bool Cross_Rect( const Rect & a, const Rect & b) { return ( abs ((a.x1+a.x2)-(b.x1+b.x2))<(a.x2-a.x1+b.x2-b.x1) && abs ((a.y1+a.y2)-(b.y1+b.y2))<(a.y2-a.y1+b.y2-b.y1) ); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库