好像是在哪个地方看到的,但忘了原文地址了。。。
float DecideOverlap(const Rect &r1,const Rect &r2)
{
int x1 = r1.x;
int y1 = r1.y;
int width1 = r1.width;
int height1 = r1.height;
int x2 = r2.x;
int y2 = r2.y;
int width2 = r2.width;
int height2 = r2.height;
int endx = max(x1+width1,x2+width2);
int startx = min(x1,x2);
int width = width1+width2-(endx-startx);
int endy = max(y1+height1,y2+height2);
int starty = min(y1,y2);
int height = height1+height2-(endy-starty);
float ratio = 0.0f;
float Area,Area1,Area2;
if (width<=0||height<=0)
return 0.0f;
else
{
Area = width*height;
Area1 = width1*height1;
Area2 = width2*height2;
ratio = Area /(Area1+Area2-Area);
}
return ratio;
}