兩個問題
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;
}