当前位置:首页 » 编程语言 » c语言两个矩形是否相交
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言两个矩形是否相交

发布时间: 2022-12-15 08:54:23

c语言:编写程序判断两个平行于坐标轴的矩形是否相交

typedef struct RECTANGULAR
{
int x1;//平行于y轴的一条边坐标,下面同理
int y1;
int x2;
int y2;
}*prect_typedef,rect_typedef;
rect_typedef rect1,rect2;
//比较两个矩形,如果其中一个矩形的某一个顶点在另外一个矩形里面,说明两个相交,返回TURE
int compare_rect(prect_typedef rect1,prect_typedef rect2)
{
int ret_val = 0;
int i = 0;
if(rect2->x1 > rect2->x2)
{
//比较rect1 x1
if(rect1->x1 > rect2->x2 && rect1->x1 < rect2->x1)
{
if(rect2->y1 > rect2->y2)
{
//比较rect1 y1
if((rect1->y1 > rect2->y2 && rect1->y1 < rect2->y1))
{
return 1;
}
//比较rect1 y2
if((rect1->y2 > rect2->y2 && rect1->y2 < rect2->y1))
{
return 1;
}
}
else
{
//比较rect1 y1
if((rect1->y1 > rect2->y1 && rect1->y1 < rect2->y2))
{
return 1;
}
//比较rect1 y2
if((rect1->y2 > rect2->y1 && rect1->y2 < rect2->y2))
{
return 1;
}
}
}
//比较rect1 x2
if(rect1->x2 > rect2->x2 && rect1->x2 < rect2->x1)
{
if(rect2->y1 > rect2->y2)
{
//比较rect1 y1
if((rect1->y1 > rect2->y2 && rect1->y1 < rect2->y1))
{
return 1;
}
//比较rect1 y2
if((rect1->y2 > rect2->y2 && rect1->y2 < rect2->y1))
{
return 1;
}
}
else
{
//比较rect1 y1
if((rect1->y1 > rect2->y1 && rect1->y1 < rect2->y2))
{
return 1;
}
//比较rect1 y2
if((rect1->y2 > rect2->y1 && rect1->y2 < rect2->y2))
{
return 1;
}
}
}
}
else
{
//比较rect1 x1
if(rect1->x1 > rect2->x1 && rect1->x1 < rect2->x2)
{
if(rect2->y1 > rect2->y2)
{
//比较rect1 y1
if((rect1->y1 > rect2->y2 && rect1->y1 < rect2->y1))
{
return 1;
}
//比较rect1 y2
if((rect1->y2 > rect2->y2 && rect1->y2 < rect2->y1))
{
return 1;
}
}
else
{
//比较rect1 y1
if((rect1->y1 > rect2->y1 && rect1->y1 < rect2->y2))
{
return 1;
}
//比较rect1 y2
if((rect1->y2 > rect2->y1 && rect1->y2 < rect2->y2))
{
return 1;
}
}
}
//比较rect1 x2
if(rect1->x2 > rect2->x1 && rect1->x2 < rect2->x2)
{
if(rect2->y1 > rect2->y2)
{
//比较rect1 y1
if((rect1->y1 > rect2->y2 && rect1->y1 < rect2->y1))
{
return 1;
}
//比较rect1 y2
if((rect1->y2 > rect2->y2 && rect1->y2 < rect2->y1))
{
return 1;
}
}
else
{
//比较rect1 y1
if((rect1->y1 > rect2->y1 && rect1->y1 < rect2->y2))
{
return 1;
}
//比较rect1 y2
if((rect1->y2 > rect2->y1 && rect1->y2 < rect2->y2))
{
return 1;
}
}
}
}
return 0; //不相交
}

㈡ C/C++判断两矩形是否相交

这个函数比较好理解。看看 #include<iostream>
using namespace std; typedef struct Rect
{
int x; //左上角x坐标
int y; //左上角Y坐标
int h; //矩形的高
int w; //矩形的宽
}RECT; bool FUN(RECT rcSour, RECT rcDest)
{
bool b_Result=true;
// 如果第一个矩形的左边x坐标大于第二个矩形右边的x坐标,肯定不相交
if(rcSour.x>(rcDest.x + rcDest.w) && (rcSour.x + rcSour.w)>rcDest.x)
b_Result=false;
// 如果第一个矩形的右边x坐标小于第二个矩形左边的x坐标,肯定不相交
if(rcSour.x<(rcDest.x + rcDest.w) && (rcSour.x + rcSour.w)<rcDest.x)
b_Result=false;
// 如果第一个矩形的底边y坐标大于第二个矩形顶边的y坐标,肯定不相交
if(rcSour.y>(rcDest.y - rcDest.h) && (rcSour.y - rcSour.h)>rcDest.y)
b_Result=false;
// 如果第一个矩形的顶边y坐标小于第二个矩形底边的y坐标,肯定不相交
if(rcSour.y<(rcDest.y - rcDest.h) && (rcSour.y - rcSour.h)<rcDest.y)
b_Result=false;
// 其它情况,均会相交
return b_Result;
}
int main()
{
RECT rect1 = {5,5,3,3};
RECT rect2 = {1,4,6,6};
if (FUN(rect1,rect2))
{
cout<<"相交"<<endl;
}
else
{
cout<<"不相交"<<endl;
}
return 0;
}

㈢ 如何判断两个矩形是否相交

1、一个矩形只有一个角的点在另一个矩形内;
2、一个矩形a只一条边上的2个顶角在另一个矩形b内(这种情况对于另一个矩形b来说却是4个顶角都在矩形a之外,所以要交换判断)。
3、一个矩形穿过另一个矩形;
这位朋友想了这么三种情形之后,觉得把这些情形写成代码过于复杂,这才跑到论坛上来提问。
有的时候,程序员考虑问题的方向就得跟别人不一样,换一个角度考虑,这个问题将变得简单:
如果两个矩形相交,则必然存在线条交叉,而能交叉的线条只有横线和竖线,两根横线或两根竖线都不可能交叉。所以,这个问题就转化成寻找是否存在交叉的横线与竖线。
另外,A线与B线交叉等价于B线与A线交叉,所以,只要写一个函数就足够用了,多调用几次,反正计算机是专门做简单而又烦琐的工作的。
下面是这个函数:判断一条横线和一条竖线是否交叉。该函数的参数分别是:横线左、横线右,横线Y,竖线上,竖线下,竖线X。
bool
CrossLine(left,
right,
y,
top,
bottom,
x){//判断一根横线和一根竖线是否交叉
//横线有三个参数:left,
right和y
//竖线有三个参数:top,
bottom和x
return
(top
<
y)
&&
(bottom
>
y)
&&
(left
<
x)
&&
(right
>
x);}下面是判断两个矩形是否相交的函数,把同一个函数多调用几篇就OK了。
bool
CrossRect(CRect
&r1,
CRect
&r2){//判断两个矩形是否相交,
//从一个矩形中取出一条横线,与另一矩形中的一条竖线判断是否交叉

㈣ c++判断俩个矩形的是否相交对吗

应该不对,呵呵,回字形状处理了么,这个不能算相交吧