求三個矩形的相交矩形。

2021-09-25 03:36:35 字數 2001 閱讀 9610

給定乙個矩形結構體:

struct rect

;要求實現函式:

rect intersectrect(const rect &recta,const rect &recta,const rect &recta)

若三個矩形有相交矩形,則返回相交矩形,若沒有,則設定返回矩形的x、y、w、h均為-1。

分析:1.首先要做三個矩形有無相交矩形的判斷,

2.若沒有,直接返回x、y、w、h均為-1的rect物件。

3.若有相交矩形,返回相交矩形。

進一步分析:三個矩形的相交比較複雜,因此我們可以分解為求兩個矩形的相交矩形,再用得到的相交矩形去與第三個矩形做相交。

首先寫乙個判斷兩個矩形相交的函式,只有三個矩形兩兩相交,才有公共矩形。

矩形相交的情況比較複雜,而不相交的情形比較簡單,兩個矩形r1、r2不相交,則有兩種情況:

(1)r1在r2的左邊(相反類同)則有r1.x+r1.w(2)r1在r2的上邊(相反類同)則有r1.y+r1.h即可以設定判斷兩個矩形是否相交的函式如下:

bool iscross(const rect &r1,const rect &r2)

然後需要寫乙個求兩個矩形相交矩形的函式。

兩個矩形r1、r2相交,分析空間位置關係,相交矩形的頂點座標即寬高可以這樣來求:

max_x = max(r1.x,r2.x);

max_y = max(r1.y,r2.y);

min_x = min(r1.x+r1.w,r2.x+r2.w);

min_y = min(r1.y+r1.h,r2.y+r2.h);

則最終的相交矩形r座標如下:

r.x = max_x;

r.y = max_y;

r.w = min_x - max_x;

r.h = min_y - max_y;

求兩個相交矩形的函式如下:

rect crossrect(const rect &r1,const rect &r2)

至此,主要函式設定完畢,完善最終要求的三個矩形相交函式即可

rect intersectrect(const rect &recta,const rect &recta,const rect &recta)

//先判斷沒有相交的情況

if(! ( iscross(recta,rectb) && iscross(recta,rectc) && iscross(rectb,rectc) ) )

else

//有相交的情況

這裡附上我在本地編譯器的完整**。

/*求三個矩形的相交矩形

要求實現函式

rect intersectrect(const rect &recta,const rect &recta,const rect &recta)

*/#include

using namespace std;

//分別表示矩形左上角頂點的座標,矩形的寬高。

struct rect

;bool iscross(const rect &r1,const rect &r2)

rect crossrect(const rect &r1,const rect &r2)

rect intersectrect(const rect &recta,const rect &rectb,const rect &rectc)

else

//有相交的情況

}int main()

;rect b = ;

rect c = ;

rect res = intersectrect(a,b,c);

cout << res.x << endl;

cout << res.y << endl;

cout << res.w << endl;

cout << res.h << endl;

int x;

cin >> x;

cout << "hello world!" << endl;

return 0;

}

求兩個矩形是否相交

getregion double x1,double y1,double x2,double y2,double dir,double allowshift 3 math.pi 180 else if math.abs dir math.pi 2 allowshift else if math.ab...

兩個矩形是否相交

假定矩形是用一對點表達的 minx,miny maxx,maxy 那麼兩個矩形rect1,rect2 相交的結果一定是個矩形,構成這個相交矩形rect的點對座標是 minx max minx1,minx2 miny max miny1,miny2 maxx min maxx1,maxx2 maxy ...

求包括n個矩形的最小矩形面積模板

typedef double typev const double eps 1e 8 const int n 50005 int sign double d struct point point operator point d ps n int n,cn double dist point d1,...