题目不难,注意圆上点的坐标就行,高中数学知识
// 先输入一个整数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。
#include<bits/stdc++.h>
using namespace std;
const double PI = 3.1415926;
int main() {
int T = 0;
cin>>T;
for(int i = 0 ; i < T ; ++i) {
double a = 0,b = 0 ,r = 0,x = 0, y = 0 , w = 0 , t = 0;
cin>>a>>b>>r>>x>>y>>w>>t;
//直线方程为y = kx+m
double k = 0 , m = 0,d = 0;
//圆上点的坐标
double another_x = a+r*cos(w*t);
double another_y = b+r*sin(w*t);
//斜率
k = (y-(another_y))/(x-(another_x));
m = y - k*x;
// printf("点的坐标为 (%lf,%lf) \n",another_x,another_y);
// printf("直线方程为 y = %lfx+%lf \n",k,m);
//点到直线距离公式
d =abs((k*a-b+m)/sqrt(k*k+1));
//两倍
double result = 2*sqrt(r*r-d*d);
cout<<setiosflags(ios::fixed)<<setprecision(2)<<result<<endl;
}
return 0;
}
----------------------------
题文:
转啊转
Time Limit: 1000 MS | Memory Limit: 65536 KB |
Total Submissions: 678 | Accepted: 173 |
Description
在二维平面上,有一个固定的圆和一个固定的点(保证该点不在圆上),还有一个动点在圆上以角速度
w绕圆心一直转。在t时刻,连接该动点与定点成一条直线k,求直线k被圆所截线段的长度(即直线k在圆内部分长度)。
动点初始时刻在圆的三点钟方向(即与x轴正方向平行),并以逆时针方向绕圆转。
Input
先输入一个整数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。
Output
输出答案占一行,保留2位小数。
Sample Input
1
1 1 1 3 1 3 0
1 1 1 3 1 3 0
Sample Output
2.00
Hint
角速度定义:
一个以弧度为单位的圆(一个圆周为2π,即:360度=2π),在单位时间内所走的弧度即为角速度。
Source
安徽省2016“京胜杯”程序设计大赛