您的位置:首页 > 其它

HDU 2056 Rectangles(矩形相交判断)

2017-11-20 20:58 423 查看
两个问题

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