您的位置:首页 > 其它

判断两矩形是否相交

2011-12-09 09:38 106 查看
//判断矩形是否相交
bool FMath::IsRectIntersect(const FRect& rect1, const FRect& rect2)
{
bool bResult = true;

double dWidthRectA;
double dHeightRectA;

double dWidthRectB;
double dHeightRectB;

//方便计算,中心点坐标为实际坐标的2倍
CPoint centerRectA;
CPoint centerRectB;

//bottom的y坐标比top的大
dWidthRectA = rect1.GetBottomRight().GetX() - rect1.GetTopLeft().GetX();
dHeightRectA = rect1.GetBottomRight().GetY() - rect1.GetTopLeft().GetY();

dWidthRectB = fabs(rect2.GetBottomRight().GetX() - rect2.GetTopLeft().GetX());
dHeightRectB = fabs(rect2.GetBottomRight().GetY() - rect2.GetTopLeft().GetY()) ;

centerRectA.x = GetDoubleInt(rect1.GetTopLeft().GetX()/2 + rect1.GetBottomRight().GetX()/2);
centerRectA.y = GetDoubleInt(rect1.GetTopLeft().GetY()/2 + rect1.GetBottomRight().GetY()/2);

centerRectB.x = GetDoubleInt(rect2.GetTopLeft().GetX()/2 + rect2.GetBottomRight().GetX()/2);
centerRectB.y = GetDoubleInt(rect2.GetTopLeft().GetY()/2 + rect2.GetBottomRight().GetY()/2);

//判断两个矩形的中心坐标的水平和垂直距离
if ( (fabs(double(centerRectA.x - centerRectB.x)) <= (dWidthRectA + dWidthRectB))
&& (fabs(double(centerRectA.y - centerRectB.y)) <= (dHeightRectA + dHeightRectB)) )
{
bResult =  true;
}
else
{
bResult =  false;
}

return bResult;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: