• HDU2298_物理题


    题目大意:
            一个人从原点射箭,求要射中(x,y)的那个物体的箭射出前与x轴的角度。(用弧度表示)
    解题思路:
            用公式的方法,
            x = v * t * cos(a); -> t = x/v/cos(a);
            y = v*sin(a)*t - 1/2*g*t*t;
            将一式中的t代入y中,变形得到:
            g*x*x*tan^2(a) - 2*v*v*x + g*x*x + 2*v*v*y = 0;
            然后用求根公式求解,题目要求求最小的那个角度,所以等于
            atan((-b-sqrt(temp))/2.0/a),有两种情况要考虑,1、方程无解输出-1。2、目标处于y轴的时候输出pi/2,或者目标在x轴上,输出0
    代码:

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

    const double g = 9.8;

    double getA(double x, double v)
    {
        return g * x * x;
    }

    double getB(double x, double v)
    {
        return -2.0 * v * v * x;
    }

    double getC(double x, double y, double v)
    {
        return g * x * x + 2.0 * v * v * y;
    }

    int main(void)
    {
        int cas;
        scanf("%d", &cas);
        while(cas--)
        {
            double x, y , v;
            scanf("%lf%lf%lf", &x, &y, &v);

            if((x == 0 && y == 0) || (x == 0 && y != 0))
            {
                printf("0\n");
                continue;
            }

            if(x == 0 && y != 0)
            {
                printf("%.6lf\n", 3.1415926 / 2);
                continue;
            }

            double a, b, c;
            a = getA(x, v);
            b = getB(x, v);
            c = getC(x, y, v);

            double temp = b * b - 4.0 * a * c;
            if(temp < 0)
            {
                printf("-1\n");
                continue;
            }
            printf("%.6lf\n", atan((-b - sqrt(temp)) / 2.0 / a));
        }
        return 0;
    }

  • 相关阅读:
    罗马数字转整数,Java执行时间超过100%用户的写法
    Vue生产环境调试的方法
    pdf翻译并转html
    {"$ref":"$.data.jobTaskList[0]"}
    More than one row with the given identifier was found
    去掉告警信息,去除告警信息
    Initialized JPA EntityManagerFactory for persistence unit 'default'
    获取当前包名、获取包名、
    nginx丢失头部信息
    SQL Error: 1526, SQLState: HY000,Table has no partition for value 738625
  • 原文地址:https://www.cnblogs.com/cchun/p/2620889.html
Copyright © 2020-2023  润新知