zoukankan      html  css  js  c++  java
  • 安徽省2016“京胜杯”程序设计大赛_E_转啊转

    转啊转

    Time Limit: 1000 MS Memory Limit: 65536 KB
    Total Submissions: 59 Accepted: 15

    Description


        在二维平面上,有一个固定的圆和一个固定的点(保证该点不在圆上),还有一个动点在圆上以角速度w绕圆心一直转。在t时刻,连接该动点与定点成一条直线k,求直线k被圆所截线段的长度(即直线k在圆内部分长度)。

             动点初始时刻在圆的三点钟方向(即与x轴正方向平行),并以逆时针方向绕圆转。

      



    Input


           先输入一个整数T,表示TT<50)组数据。

    每组数据一行七个实数a,b,r(r>0),x,y,w(w>=0),t(t>=0) 分别表示圆的圆心坐标(a,b),半径r,固定点坐标(x,y),角速度w,要查询的时刻t

        上述所有数据的绝对值小于10000


    Output


             输出答案占一行,保留2位小数。


    Sample Input


    1
    1 1 1 3 1 3 0


    Sample Output


    2.00

    Hint


    角速度定义:

    一个以弧度为单位的圆(一个圆周为2π,即:360=2π),在单位时间内所走的弧度即为角速度。


    这道题在省赛时没有做出来,真的是很亏,考得纯粹的数学题
    题解,这道题也是比较简单的,注意点到直线的公示
    点(a, b),直线:y=kx+b;
    距离d=|kx-y+b|/√[k²+(-1)²] ;
    然后就是点B的表示方式:B(a+rcos(wt), b+rsin(wt));
    有这几个就可以把这道题给写好了
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
        int T;
        scanf("%d", &T);
        while (T--)
        {
            double a, b, r, x, y, w, t;
            scanf("%lf%lf%lf%lf%lf%lf%lf", &a, &b, &r, &x, &y, &w, &t);
            double bx = a + r * cos(w*t);
            double by = b + r * sin(w*t);
            double k = (by - y) / (bx - x);//斜率k
            double l = y - k * x;
            double d = pow(k * a - b + l, 2) / (k * k + 1);//点到直线的距离公式
            double ans = sqrt(r * r - d) * 2;
            printf("%.2lf
    ", ans);
        }
        return 0;
    }
    


  • 相关阅读:
    XML操作类
    输入框样式总结
    根据计算机MAC地址限定每台机子只能领取一次账号
    ico图标的应用
    C#实现关机功能
    在sql中实现数组
    JSON
    MvcHtml.ActionLink()用法
    Brettle.Web.NeatUpload.dll 大文件上传
    asp.net 创建Access数据库
  • 原文地址:https://www.cnblogs.com/fayne/p/7224800.html
Copyright © 2011-2022 走看看