Acdream 1203 KIDx's Triangle(解三角形)

题目链接:传送门

分析

给定角a,b,c,d.然后求角AED,这题其实就是高中的计算几何解三角形题目。

正弦定理: A/sin(A) = B/sin(B) = C/sin(C)=2*R (R为三角形外接圆的半径)

余弦定理:A^2 = B^2 + C^2 - 2*B*C*cos(A).

然后我们设AB = x ,然后可以通过正弦定理求出AD,BD,BE,AE,然后通过余弦定理

可以求出DE最后在通过正弦定理就可以求出角AED.需要注意的是asin()的范围为

[-pi/2,pi/2],我们得到的sin(AED)的值之后还需要判断一下角的范围。这题需要

特判一下几个角为0的情况。具体实现见代码。

代码如下:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;

const double pi = acos(-1.0);

double getr(double x){
    return x/180.0*pi;
}

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("%.2lf\n",c);
            continue;
        }
        else if(d==0){
            printf("%.2lf\n",b+c);
            continue;
        }
        double ab = 10.0;
        a = getr(a);
        b = getr(b);
        c = getr(c);
        d = getr(d);
        double ad = ab*sin(c)/sin(pi-b-c-a);
        double bd = ab*sin(a+b)/sin(pi-b-c-a);
        double be = ab*sin(b)/sin(pi-b-c-d);
        double ae = ab*sin(d+c)/sin(pi-b-c-d);
        double de = sqrt(bd*bd+be*be-2*bd*be*cos(d));
        double sinans = ad/de*sin(a);
        double ans;
        if(ad*ad>de*de+ae*ae) ans = 180-asin(sinans)/pi*180.0;
        else ans = asin(sinans)/pi*180.0;
        printf("%.2lf\n",ans);
    }
    return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值