當前位置:首頁 » 編程語言 » 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++判斷倆個矩形的是否相交對嗎

應該不對,呵呵,回字形狀處理了么,這個不能算相交吧