zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    js-xlsx实现文件导出、下载(excel)
    css多行文本显示省略号
    八数码问题-A*算法-Java实现
    vue内置组件-transtion
    《javascript高级程序设计》(第三版)读书笔记
    html比较实用的字符实体
    vuex的个人理解
    前端路由
    函数节流(throttle)和防抖(debounce)
    audio音频
  • 原文地址:https://www.cnblogs.com/cchun/p/2620889.html
Copyright © 2011-2022 走看看