給定乙個矩形結構體:
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,...