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)
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; }
相关文章推荐
- HDU 2056 Rectangles (求两个相交矩形面积)
- HDU 1221 Rectangle and Circle(判断圆与矩形是否相交)
- HDU_2056——相交矩形的面积
- HDU 2056 Rectangles(计算相交面积)
- hdu 2056 -- Rectangles (矩形重合)
- HDU 2056 Rectangles(矩形面积交)
- hdu 5128 The E-pang Palace 大力判矩形相交
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形是否相交
- HDU 2056 Rectangles
- hdu-1147 Pick-up sticks(判断线段相交)
- 判断两个矩形是否相交的4个方法
- 快速判断两个矩形是否相交
- hdu 2436 判断长方体与球是否相交
- hdu 1558 Segment set(并查集+判断线段是否相交)
- 判断矩形是否相交
- 判断两个线段\矩形相交
- 判断两矩形是否相交
- 判断任意多边形与矩形的相交(线段与矩形相交或线段与线段相交)
- HDU 2056 Rectangles (求相交矩形的面积)