Posted on 2010-09-20 22:06
Uriel 阅读(646)
评论(0) 编辑 收藏 引用 所属分类:
POJ 、
计算几何
POJ 1380是去年十月做的,今天发现POJ 2172与POJ 1380一样的。。拿原来代码直接贴了。。
1380是问一个矩形能否塞进另一个矩形,2172其实一回事,虽然变成三维,但是只要判三次就行了。。
如图,假设小矩形正好卡进去的情况,求出边长Len需要多少,Len>a则塞不进
代码中:∠1=∠sita ∠1+∠2=∠p
以下是2172的代码,1380判定过程跟这个一样,而且只要判一次就行
//Problem: 2172 User: Uriel
//Memory: 208K Time: 32MS
//Language: C++ Result: Accepted
//2010.09.20
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
struct point {
double x,y,h;
}a,b;
void Swap(double & a,double & b){
double t;
t=a;
a=b;
b=t;
}
bool check(double c,double d,double a,double b){
if(a*b<c*d)return false;
if(a<b)Swap(a,b);
if(c<d)Swap(c,d);
if(b<d)return false;
if(a>=c && b>=d)return true;
double dis=sqrt(c*c+d*d);
double p=asin(b/dis);
double q=asin(d/dis);
double sita=p-q;
double Len=c*cos(sita)+d*sin(sita);
if(Len<=a)return true;
return false;
}
int main(){
scanf("%lf %lf %lf %lf %lf",&a.x,&a.y,&a.h,&b.x,&b.y);
if(check(a.x,a.y,b.x,b.y)||check(a.x,a.h,b.x,b.y)||check(a.y,a.h,b.x,b.y))puts("YES");
else
puts("NO");
return 0;
}