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;
    }
  • 相关阅读:
    Kafka中数据的流向
    kafka调试中遇到could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
    knife4j
    SpringBoot使用ELK日志收集ELASTIC (ELK) STACK
    Jedis连接池(实际项目可用)
    Redis windows安装帮助
    Spring Boot 多数据配置更新
    SpringBoot使用Mybatis-Generator
    tkinter显示图片
    window nodejs 版本管理器 nvm-windows 教程
  • 原文地址:https://www.cnblogs.com/topk/p/6580116.html
Copyright © 2011-2022 走看看