已知角a,b,c,d求角aed.(0=<a,b,c,d<90)
思路:其实和边没关系,都相似的。不妨设ab=10.0;
由正弦定理容易求出 ad,ae,余弦定理求出de。
答案就呼出来了。最后求反三角。
算法没问题。但是比赛时候一直跪。。。后来躺床上一想,哎!acrsin返回的是 (-pai/2,pai/2)!若是钝角他返回锐角啊!sb了!所以判断一下脚aed是否大于90,再做正弦定理。或者直接用arccos求,返回的是(0,pai).
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
const double pai=3.14159265;
int main()
{
double a,b,c,d;
while(cin>>a>>b>>c>>d)
{
if(a==0||c==0)
{
printf("0.00\n");
continue;
}
else if(b==0)
{
printf("%.2f\n",c);
continue;
}
else if(d==0)
{
printf("%.2f\n",b+c);
continue;
}
else
{
double jiao1=180.0-a-b-c;
double jiao2=180.0-b-c-d;
double x1=10.000;
double x2=x1/sin(jiao1/180.0*pai)*sin(c/180.0*pai);
double x4=x1/sin(jiao2/180.0*pai)*sin((c+d)/180.0*pai);
double de=sqrt(x2*x2+x4*x4-cos(a/180.0*pai)*2*x2*x4);
double ans=asin(x2*sin(a/180*pai)/de)/pai*180;
if((de*de+x4*x4-x2*x2)/(2*x4*de)<0)
printf("%.2f\n",180-ans);
else printf("%.2f\n",ans);
}
}
return 0;
}