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

转啊转

Time Limit: 1000 MS Memory Limit: 65536 KB
Total Submissions: 25 Accepted: 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 }

 

posted @ 2016-05-30 01:36  OhYee  阅读(283)  评论(0编辑  收藏  举报