您的位置:首页 > Web前端 > AngularJS

uva 12301 - An Angular Puzzle

2013-08-20 22:17 176 查看
题意:如图,已知角ACB,
角CAE,
角EAB, 角CBD, 角DBA (in degrees), 求角 DEA。



注意:在 Output 中,“If there is more than one solution, print "Multiple
solutions"”这句话是迷惑你的,根本没有这种情况!

#include<iostream>
#include<iomanip>
#include<cmath>
#define pi (2.0*asin(1.0))

using namespace std;

typedef struct point
{
double x,y;
point(double xx=0,double yy=0):x(xx),y(yy){}
}vector;

vector operator - (point a,point b)
{
return vector(a.x-b.x,a.y-b.y);
}
point operator + (point a,vector b)
{
return point(a.x+b.x,a.y+b.y);
}
vector operator * (vector a,double b)
{
return vector(a.x*b,a.y*b);
}
double dot(vector a,vector b)
{
return a.x*b.x+a.y*b.y;
}
double len(vector a)
{
return sqrt(dot(a,a));
}
double angle(vector a,vector b)
{
return acos(dot(a,b)/len(a)/len(b));
}
double cross(vector a,vector b)
{
return a.x*b.y-a.y*b.x;
}
vector rot(vector a,double rad)
{
double c=cos(rad),s=sin(rad);
return vector(a.x*c-a.y*s,a.x*s+a.y*c);
}
point inter(point p,vector v,point q,vector w)
{
vector u=p-q;
double t=cross(w,u)/cross(v,w);
return p+v*t;
}

int main()
{
double a,b,c,d,e,s;
point pa,pb,pd,pe;
pb.x=10;
while(cin>>a>>b>>c>>d>>e)
{
s=a+b+c+d+e;
if(s==0) break;
else if(s!=180) cout<<"Impossible"<<endl;
else
{
b*=pi/180;
c*=pi/180;
d*=pi/180;
e*=pi/180;
vector v=rot(pb-pa,b+c),w=rot(pb-pa,pi-d-e);
pd=inter(pa,v,pb,rot(pb-pa,pi-e));
pe=inter(pa,rot(pb-pa,c),pb,w);
double x=angle(pe-pd,pe-pa)*180/pi;
cout<<fixed<<setprecision(2)<<x<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM-ICPC VC AMP uva C