我是靠谱客的博主 敏感发卡,最近开发中收集的这篇文章主要介绍两个矩形相交问题-判断是否相交,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近,面试遇到一道算法题目如下:

两个矩形,判断是否相交;如果相交面积大于零,输出相交部分的左上角以及右下角坐标点,否则,输出(-1,-1)、(-1,-1)。

没有给出完善的解决方案,在面试官的细心引导下,解决了两个线段相交输出交点的问题。因此下来在网上搜了相关的问题。

1)下面是转自https://blog.csdn.net/szfhy/article/details/49740191判断两个矩形是否相交的方法:

下图是两个矩形相交的5种情况:

如果两个矩形相交,那么矩形A B的中心点和矩形的边长是有一定关系的。

Case 2345中,两个中心点间的距离肯定小于AB边长和的一半。

Case 1中就像等了。

设A[x01,y01,x02,y02]  B[x11,y11,x12,y12].

矩形A和矩形B物理中心点X方向的距离为Lx:abs( (x01+x02)/2 – (x11+x12) /2)

矩形A和矩形B物理中心点Y方向的距离为Ly:abs( (y01+y02)/2 – (y11+y12) /2)

矩形A和矩形B X方向的边长为 Sax:abs(x01-x02)  Sbx: abs(x11-x12)

矩形A和矩形B Y方向的边长为 Say:abs(y01-y02)  Sby: abs(y11-y12)

如果AB相交,则满足下列关系:

Lx <= (Sax + Sbx)/2 && Ly <=(Say+ Sby)/2

 1 static uint8_t is_rect_intersect(int x01, int x02, int y01, int y02,
 2     int x11, int x12, int y11, int y12)
 3 {
 4     int zx = abs(x01 + x02 -x11 - x12);
 5     int x  = abs(x01 - x02) + abs(x11 - x12);
 6     int zy = abs(y01 + y02 - y11 - y12);
 7     int y  = abs(y01 - y02) + abs(y11 - y12);
 8     if(zx <= x && zy <= y)
 9         return 1;
10     else
11         return 0;
12 
13 }

2)如何确定相交部分矩形的左上角坐标和右下角坐标,网上看了很多版本,总觉得不全面。(比如好多都是在原有的两个矩形的坐标中中确定相交矩形的坐标,明显忽略了交点是两个矩形边相交的情况(如下图),等后面学习到全面的答案,再做补充)

 

 

转载于:https://www.cnblogs.com/ArleneZhangfj/p/9997968.html

最后

以上就是敏感发卡为你收集整理的两个矩形相交问题-判断是否相交的全部内容,希望文章能够帮你解决两个矩形相交问题-判断是否相交所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部