Description
╰☆莣メ誋こ月是月大叔的ID,他是一个掌握着429种几何画法的的几何大师,最擅长的技能就是搞事,今天他又要开始搞事了。
给你一个等腰三角形,其中A,B,C,D角已知,求E角的角度。
Input
输入第一行包含一个正整数
t(1≤t≤100) ,表示有t组数据
对于每组数据:
第二行四个整数,A,B,C,D表示度数。满足A+B=C+D且A+B<90
Output
对于每组测试数据的询问,输出E角的度数,请保留两位小数
Sample Input
1
10 70 20 60
Sample Output
20.00
Hint
题意
题解:
正弦定理可以用 不过要注意不会存在大于90度的角(应该) (原因见代码) 用余弦加正弦更好做一些 不会出现等等情况 方法是设底为1
AC代码
#include <cstdio>
#include <cmath>
const double pi = acos(-1.0);
int main(){
int t;
scanf("%d",&t);
while (t--){
double a,b,c,d;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
double x = 180-b-d-c;
double sina = sin(a*pi/180);
double sind = sin(d*pi/180);
double sinx = sin(x*pi/180);
double sinc = sin(c*pi/180);
double cosb = cos(b*pi/180);
double cosa = cos(a*pi/180);
double cosx = cos(x*pi/180);
double sinb = sin(b*pi/180);
double tane = sina*sind*sinx/(sinc*sina*cosb+cosa*sinb*sinc-sina*sind*cosx);
if (sinc*sina*cosb+cosa*sinb*sinc-sina*sind*cosx==0) printf("90.00\n");
else{
double ans = atan(tane)*180/pi;
if (ans < 0) ans +=180;
//应该没有大于90的情况
printf("%.2lf\n",ans);
}
}
return 0;
}
余弦 (标程)
#include<bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
int main(){
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
int t;
scanf("%d",&t);
while(t--){
double a,b,c,d;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
double f = 180 - a - b - c - d;
double CD = sin((c+d)*pi/180.0) / sin(f*pi/180.0);
double D = sin(d*pi/180.0) / sin((180-a-b-d)*pi/180.0);
double B = sin(b*pi/180.0) / sin((180-c-d-b)*pi/180.0);
double X1 = CD - D;
double X2 = CD - B;
double X3 = sqrt(X1*X1+X2*X2-2*X1*X2*cos(f*pi/180.0));
double x4 = acos((X3*X3+X2*X2-X1*X1)/(2.0*X3*X2));
double X4 = x4*180.0/pi;
double h = 180 - b - c - d;
double ans = 180 - h - X4;
printf("%.2f\n",ans);
}
}
还有人向量做啊 想不出来
*向量解法