这是一项家庭作业,所以我主要是要求朝着正确的方向努力。我已经找到了大部分问题。我们有一个Rectangle类,其矩形由Point类中的x和y坐标定义。我坚持的一部分是弄清楚两个矩形是否相交。我做了一些研究,并且发现了这个:
http://silentmatt.com/rectangle-intersection/
这有助于我了解如何完成这项工作。但我似乎无法按照我们的老师在问题概述中设置它的方式来实现它:
//This method returns true if this rectangle intersects with another rectangle (which is provided as a parameter)
bool intersects(Rectangle);
intersects函数只接受一个参数,即Rectangle类。在main中调用它是这样的:
rec1.intersects(rec2);
但是,我似乎无法弄清楚如何实现实际功能。我已经用setter定义了rec1和rec2的点,但我似乎无法弄清楚如何使用只接受一个参数的函数来访问这些点。因为,在上面的示例中,我可以访问rec2的x和y点,但我不能使用rec1。
有关如何进行的任何提示?
编辑:我认为我的部分问题在于如何实施。这是我们在Rectangle类中的内容:private:
Point lowerLeftCorner;
Point upperRightCorner;
然后他让我们在Point类中设置get和set函数来设置lowerLeftCorner和upperRightCorner的点。
问题是当我在交叉函数中时,我只能(除非我遗漏了某些东西)使用参数(rectangle2)的get函数而不是第一个矩形(rectangle1)。
如果我能够将两个矩形作为参数传递,我可以使用给定的示例来解决这个问题。它能够找到第一个给我带来麻烦的矩形的x和y值。
编辑:罗伯特的信息帮助我弄清楚如何使用“this”来做到这一点。这是我最终得到的,似乎运作良好。它可能不是最好的,我仍然是编程的新手。bool Rectangle::intersects(Rectangle rec2) {
return ( getupperX() > rec2.getlowerX() &&
getlowerX() < rec2.getupperX() &&
getupperY() > rec2.getlowerY() &&
getlowerY() < rec2.getupperY());
}
}
似乎对我测试过的所有价值都有效!
答案 0 :(得分:2)
在C ++中,如果您在类的成员函数内,则可以隐式访问该类的成员变量。
所以,如果你有
struct Rectangle
{
Point UpperLeft;
Point LowerRight;
bool intersects(Rectangle);
}
然后在 intersects()函数中,因为它是类的成员,所以可以访问该类的成员变量,如下所示:
Rectangle::intersects(Rectangle rhs)
{
// So the second UpperLeft here is a member of "this" instance of the class
if(rhs.UpperLeft < UpperLeft)
return true;
}
该功能实际上不会检测到交叉点,但这就是您访问所有点的方式。
所以如果你有:
Rectangle rect_a;
Rectangle rect_b;
rect_a.intersects(rect_b);
然后你会调用 rect_a 的 intersects()函数,所以在上面的例子中它将是“this”,其中 rect_b 将是 rhs
编辑: 或者,在上面的示例中,您可以编写类似
的内容Rectangle::intersects(Rectangle rhs)
{
if(rhs.GetLowerLeft() < GetLowerLeft())
return true;
}
第二个GetLowerLeft()将在“this”上调用
答案 1 :(得分:1)
此?
bool Rectangle::intersects(Rectangle r) {
return
(x1 < r.x2
&& x2 > r.x1
&& y1 < r.y2
&& y2 > r.y1);
}
如果您想使用get函数,请使用它们:
bool Rectangle::intersects(Rectangle r) {
return
(this->getX1() < r.getX2();
// ....
}
答案 2 :(得分:1)
Pubby为这个问题提供了一个可能的案例。
如果你真的想要解决这个问题,请先尝试在1维案例中查看,2行。你会发现3-5个案例:
左侧重叠。 右侧重叠。 两个左端点坐标都是相同的 两个右端点坐标都是相同的 左侧和右侧坐标都相同(线长度相同,坐标相同)
然后尝试将其扩展为二维对象。 Pubby的例子可以帮助你开始。