已知角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; }
时间: 2024-10-08 17:47:20