POJ2276 空间几何数学公式题



把他们都投影到一个平面上, 然后用余弦定理去求解 能够得到方程, 直接写出 答案的表达式;

这个题需要注意的就是四舍五入的, 直接用 .0lfWA, 这里用到一个技巧, 就是先把double类型的都先加0.5 然后在用int去强制转换, 舍弃掉小数部分;

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

const double pi = 3.141592653589793;

double t(double a){
    return tan(pi / 180 * a);
}

double f(double a, double b, double c, double n){
    double zi = 2 * n*n * a*a * b*b * c*c;
    double mu = c*c * b*b + a*a * b*b - 2 * a*a * c*c;
    return sqrt(zi/mu);
}

int main(){
    double D, H, a, b, c;
    scanf("%lf%lf", &D, &H);
    while(scanf("%lf%lf%lf", &a, &b, &c) == 3){
        if(a<=0 || b<=0 || c<=0) break;
        double ans = f(t(a), t(b), t(c), D) + H + 0.5;
        printf("%d\n", (int)ans);
    }
    return 0;
}