zoukankan      html  css  js  c++  java
  • 2016年安徽省程序设计竞赛-转啊转

    题目描述
    在二维平面上,有一个固定的圆和一个固定的点(保证该点不在圆上),还有一个动点在圆上以角速度w绕圆心一直转。在t时刻,连接该动点与定点成一条直线k,求直线k被圆所截线段的长度(即直线k在圆内部分长度)。 动点初始时刻在圆的三点钟方向(即与x轴正方向平行),并以逆时针方向绕圆转。

    输 入
    先输入一个整数T,表示T(T<50)组数据。每组数据一行七个实数a,b,r(r>0),x,y,w(w>=0),t(t>=0) 分别表示圆的圆心坐标(a,b),半径r,固定点坐标(x,y),角速度w,要查询的时刻t。 上述所有数据的绝对值小于10000。

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

    样例输入
    1
    1 1 1 3 1 3 0
    样例输出
    2.00
    提 示
    角速度定义:一个以弧度为单位的圆(一个圆周为2π,即:360度=2π),在单位时间内所走的弧度即为角速度。

    此题主要运用几何知识,我先根据 y = kx + b 求出直线方程,
    k为斜率, b为直线在轴的截距,然后再根据点到线的距离求出圆心到直线的距离l_2,最后再求出圆所截直线的长度dist.

    #include <iostream>
    #include <fstream>
    #include <iomanip>
    #include <cmath>
    using namespace std;
    const double PI = 3.1415926;
    
    int main()
    {
        std::ios::sync_with_stdio(false);
        std::cin.tie(0);
        //ifstream cin("data1.in");
    
        int T;
        cin >> T;
        while(T --)
        {
            double a, b, r, x, y, w, t;
            cin >> a >> b >> r >> x >> y >> w >> t;
            double x2 = a + r * cos(w * t);
            double y2 = b + r * sin(w * t);
            double k = (y2 - y) / (x2 - x);  //k为斜率
            double B = (y - k * x);   //B为直线在y轴的截距
            double l_2 = pow((k * a - b + B), 2) / (k * k + 1);
            double dist = sqrt(r * r - l_2);
            cout << setiosflags(ios::fixed) << setprecision(2) << 2 * dist << endl;
        }
    
        return 0;
    }
  • 相关阅读:
    HTML元素解释
    Java命名规范
    HDU 1058 Humble Numbers(DP,数)
    HDU 2845 Beans(DP,最大不连续和)
    HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
    HDU 2870 Largest Submatrix(DP)
    HDU 1421 搬寝室(DP)
    HDU 2844 Coins (组合背包)
    HDU 2577 How to Type(模拟)
    HDU 2159 FATE(二维完全背包)
  • 原文地址:https://www.cnblogs.com/topk/p/6580116.html
Copyright © 2011-2022 走看看