概述
判断两矩形是否相交,因若矩形相交时,在X轴方向和Y轴方向必然存在重叠的部分,因此可将其转化为两条直线是否重叠的问题上。
假设矩形的表示方法为:
class Rectangle
{
int x;
int y;
int width;
int height;
};
x,y为矩形的位置点,width表示长,height表示宽。width与height可为正负数。
width>0,height>0时,点(x,y)在矩形的左下角;
width>0,height<0时,点(x,y)在矩形的左上角;
width<0,height>0时,点(x,y)在矩形的右下角;
width<0,height<0时,点(x,y)在矩形的右上角;
判断是否矩形R1,R2是否相交可转化为X轴与Y轴的直线是否相交,判断两直线是否相交的思路是相交部分的直线长度必然>0:
bool isCross(const Rectangle &r1,const Rectangle &r2)
{
int w;
int h;
w=abs(r1.width+r2.width)-abs(r1.x-r2.x)-abs(r1.x+r1.width-(r2.x+r2.width);
w/=2;
h=abs(r1.height+r2.height)-abs(r1.y-r2.y)-abs(r1.y+r1.height-(r2.y+r2.height));
h/=2;
if(w<=0||h<=0)
return false;
return true;
}
上述方法,可顺便求出相交部分的width和height,但其正负号以及相交矩形的位置点(x,y)则需再另行判断,即上述方法不管矩形以什么形式来表示均适用。
相交矩形位置点(x,y)的确定与矩形的表示方法相关,大体的思路为:将其转化为X轴与Y轴直线相交直线起点的确定(前提是两矩形确定为相交)。
先将两直线的起点与终点进行排序(排序为日常的排序,非绝对值后再排序),若位置点在矩形的左边,取排序后的第2点为相交直线的起点;若位置点在矩形的右边,取排序后的第3点为相交直线的起点。
如在X轴方向上,直线ab,直线cd,若ab>0或cd>0时(位置点在左边),width为正,当a>c,x=a,当a<c,x=c;若ab<0或cd<0时(位置点在右边),width为负,当b>d,x=b,当b<d,x=d;同样在Y轴方向上也是如此判断。
最后
以上就是迷你往事为你收集整理的判断两矩形是否相交的全部内容,希望文章能够帮你解决判断两矩形是否相交所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复