1 //判断矩形是否相交
2 bool FMath::IsRectIntersect(const FRect& rect1, const FRect& rect2)
3 {
4 bool bResult = true;
5
6 double dWidthRectA;
7 double dHeightRectA;
8
9 double dWidthRectB;
10 double dHeightRectB;
11
12 //方便计算,中心点坐标为实际坐标的2倍
13 CPoint centerRectA;
14 CPoint centerRectB;
15
16 //bottom的y坐标比top的大
17 dWidthRectA = rect1.GetBottomRight().GetX() - rect1.GetTopLeft().GetX();
18 dHeightRectA = rect1.GetBottomRight().GetY() - rect1.GetTopLeft().GetY();
19
20 dWidthRectB = fabs(rect2.GetBottomRight().GetX() - rect2.GetTopLeft().GetX());
21 dHeightRectB = fabs(rect2.GetBottomRight().GetY() - rect2.GetTopLeft().GetY()) ;
22
23 centerRectA.x = GetDoubleInt(rect1.GetTopLeft().GetX()/2 + rect1.GetBottomRight().GetX()/2);
24 centerRectA.y = GetDoubleInt(rect1.GetTopLeft().GetY()/2 + rect1.GetBottomRight().GetY()/2);
25
26 centerRectB.x = GetDoubleInt(rect2.GetTopLeft().GetX()/2 + rect2.GetBottomRight().GetX()/2);
27 centerRectB.y = GetDoubleInt(rect2.GetTopLeft().GetY()/2 + rect2.GetBottomRight().GetY()/2);
28
29
30 //判断两个矩形的中心坐标的水平和垂直距离
31 if ( (fabs(double(centerRectA.x - centerRectB.x)) <= (dWidthRectA + dWidthRectB))
32 && (fabs(double(centerRectA.y - centerRectB.y)) <= (dHeightRectA + dHeightRectB)) )
33 {
34 bResult = true;
35 }
36 else
37 {
38 bResult = false;
39 }
40
41 return bResult;
42
43 }
复制代码
 
分类: 算法
标签: C++
posted on 2012-06-19 15:32  知识天地  阅读(499)  评论(0编辑  收藏  举报