HFUT 1356.转啊转(安徽省2016“京胜杯”程序设计大赛 E)

转啊转

Time Limit: 1000 MSMemory Limit: 65536 KB
Total Submissions: 25Accepted: 8

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π),在单位时间内所走的弧度即为角速度。

 

 

 

纯粹的数学问题。

使用两点式、点到直线距离公式、勾股定理求解即可

要注意的是

double输入用%lf 输出用%f

不然会有奇妙的问题出现

 

 

AC代码:GitHub

 1 /*
 2 By:OhYee
 3 Github:OhYee
 4 HomePage:http://www.oyohyee.com
 5 Email:oyohyee@oyohyee.com
 6 Blog:http://www.cnblogs.com/ohyee/
 7 
 8 かしこいかわいい?
 9 エリーチカ!
10 要写出来Хорошо的代码哦~
11 */
12 
13 #include <cstdio>
14 #include <algorithm>
15 #include <cstring>
16 #include <cmath>
17 #include <string>
18 #include <iostream>
19 #include <vector>
20 #include <list>
21 #include <queue>
22 #include <stack>
23 #include <map>
24 using namespace std;
25 
26 //DEBUG MODE
27 #define debug 0
28 
29 //循环
30 #define REP(n) for(int o=0;o<n;o++)
31 
32 const double PI = 3.1415926;
33 
34 void Do() {
35     double a,b,r,x,y,w,t;
36     scanf("%lf%lf%lf%lf%lf%lf%lf",&a,&b,&r,&x,&y,&w,&t);
37 
38     double xb = a + r * cos(w*t);
39     double yb = b + r * sin(w*t);
40 
41     double A = y - yb;
42     double B = xb - x;
43     double C = x * yb - xb * y;
44 
45     double l = abs(A * a + B * b + C) / sqrt(A * A + B * B);
46 
47     double ans = 2 * sqrt(r * r - l * l);
48 
49     printf("%.2f\n",abs(ans));
50 }
51 
52 int main() {
53     int T;
54     scanf("%d",&T);
55     while(T--) 
56         Do();
57     return 0;
58 }

 

转载于:https://www.cnblogs.com/ohyee/p/5540964.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值