猿问

确定两个矩形是否重叠?

确定两个矩形是否重叠?

我正在尝试编写一个C+程序,它接受用户的以下输入来构造矩形(介于2到5之间):高度、宽度、x-pos、y-pos。所有这些矩形都将与x和y轴平行存在,即它们的所有边都有0或无穷大的斜率。

我试着去实现这,这个有疑问,但我运气不太好。

我目前的实现如下:

// Gets all the vertices for Rectangle 1 and stores them in an array -> arrRect1
// point 1 x: arrRect1[0], point 1 y: arrRect1[1] and so on...
// Gets all the vertices for Rectangle 2 and stores them in an array -> arrRect2
// rotated edge of point a, rect 1int rot_x, rot_y;rot_x = -arrRect1[3];rot_y = arrRect1[2];
// point on rotated edgeint pnt_x, pnt_y;pnt_x = arrRect1[2]; pnt_y = arrRect1[3];
// test point, a from rect 2int tst_x, tst_y;tst_x = arrRect2[0];tst_y = arrRect2[1];
int value;value = (rot_x * (tst_x - pnt_x)) + (rot_y * (tst_y - pnt_y));cout << "Value: " << value;

但是,我不太确定(A)我是否正确地实现了我链接到的算法,或者我是否准确地解释了这一点?

有什么建议吗?


海绵宝宝撒
浏览 950回答 3
3回答

心有法竹

struct&nbsp;rect{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;x; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;y; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;width; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;height;};bool&nbsp;valueInRange(int&nbsp;value,&nbsp;int&nbsp;min,&nbsp;int&nbsp;max){&nbsp;return&nbsp;(value&nbsp;>=&nbsp;min)&nbsp;&&&nbsp;(value&nbsp;<=&nbsp;max);&nbsp;}bool&nbsp;rectOverlap(rect&nbsp;A,&nbsp;rect&nbsp;B){ &nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;xOverlap&nbsp;=&nbsp;valueInRange(A.x,&nbsp;B.x,&nbsp;B.x&nbsp;+&nbsp;B.width)&nbsp;|| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valueInRange(B.x,&nbsp;A.x,&nbsp;A.x&nbsp;+&nbsp;A.width); &nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;yOverlap&nbsp;=&nbsp;valueInRange(A.y,&nbsp;B.y,&nbsp;B.y&nbsp;+&nbsp;B.height)&nbsp;|| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valueInRange(B.y,&nbsp;A.y,&nbsp;A.y&nbsp;+&nbsp;A.height); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;xOverlap&nbsp;&&&nbsp;yOverlap;}

慕虎7371278

struct&nbsp;Rect{ &nbsp;&nbsp;&nbsp;&nbsp;Rect(int&nbsp;x1,&nbsp;int&nbsp;x2,&nbsp;int&nbsp;y1,&nbsp;int&nbsp;y2) &nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;x1(x1),&nbsp;x2(x2),&nbsp;y1(y1),&nbsp;y2(y2) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert(x1&nbsp;<&nbsp;x2); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert(y1&nbsp;<&nbsp;y2); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;x1,&nbsp;x2,&nbsp;y1,&nbsp;y2;};booloverlap(const&nbsp;Rect&nbsp;&r1,&nbsp;const&nbsp;Rect&nbsp;&r2){ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;rectangles&nbsp;don't&nbsp;overlap&nbsp;if &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;one&nbsp;rectangle's&nbsp;minimum&nbsp;in&nbsp;some&nbsp;dimension&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;is&nbsp;greater&nbsp;than&nbsp;the&nbsp;other's&nbsp;maximum&nbsp;in &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;that&nbsp;dimension. &nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;noOverlap&nbsp;=&nbsp;r1.x1&nbsp;>&nbsp;r2.x2&nbsp;|| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2.x1&nbsp;>&nbsp;r1.x2&nbsp;|| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1.y1&nbsp;>&nbsp;r2.y2&nbsp;|| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2.y1&nbsp;>&nbsp;r1.y2; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;!noOverlap;}
随时随地看视频慕课网APP
我要回答