两个问题
1.精度问题
用double不要用float。在hdu里面有一些题用float就wa,换成double就ac,注意精度
2.矩形相交判断
说个题外话,其实很多2D游戏的道具判断就是这样,例如超级玛丽遇到蘑菇就会变大,其实就是矩形相交触发的事件
假定矩形是用一对点表达的(minx, miny) (maxx, maxy),那么两个矩形
rect1{(minx1, miny1)(maxx1, maxy1)}
rect2{(minx2, miny2)(maxx2, maxy2)}
相交的结果一定是个矩形,构成这个相交矩形rect{(minx, miny) (maxx, maxy)}的点对坐标是:
minx = max(minx1, minx2)
miny = max(miny1, miny2)
maxx = min(maxx1, maxx2)
maxy = min(maxy1, maxy2)
如果两个矩形不相交,那么计算得到的点对坐标必然满足:
( minx > maxx ) 或者 ( miny > maxy )
㈠ 相交矩形: (minx, miny) (maxx, maxy)
㈡ 面积: 面积的计算可以和判定一起进行
if ( minx>maxx ) return 0;
if ( miny>maxy ) return 0;
return (maxx-minx)*(maxy-miny)
#include<stdio.h>
double max(double a,double b)
{
return a>b?a:b;
}
double min(double a,double b)
{
return a<b?a:b;
}
int main()
{
double x1,y1,x2,y2,x3,y3,x4,y4,temp;
while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4) != EOF)
{
if (x1>x2) temp=x1,x1=x2,x2=temp;
if (y1>y2) temp=y1,y1=y2,y2=temp;
if (x3>x4) temp=x3,x3=x4,x4=temp;
if (y3>y4) temp=y3,y3=y4,y4=temp;
x3=max(x1,x3);
x2=min(x2,x4);
y3=max(y1,y3);
y2=min(y2,y4);
if(x3>x2||y3>y2)
printf("0.00\n");
else
printf("%.2lf\n",(x3-x2)*(y3-y2));
}
return 0;
}