安徽省2016“京胜杯”程序设计大赛_E_转啊转

#
转啊转












Time Limit: 1000 MSMemory Limit: 65536 KB
Total Submissions: 59Accepted: 15


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

这道题在省赛时没有做出来,真的是很亏,考得纯粹的数学题
题解,这道题也是比较简单的,注意点到直线的公示
点(a, b),直线:y=kx+b;
<span style=”font-family:zuoyeFont_mathFont,”Microsoft Yahei”,宋体,sans-serif; background-color:rgb(255,255,238)”>距离d=|kx-y+b|/√[k²+(-1)²] ;

然后就是点B的表示方式:B(a+rcos(wt), b+rsin(wt));
有这几个就可以把这道题给写好了
#include 
#include
#include

using namespace std;

int main()
{
int T;
scanf(“%d”, &T);
while (T–)
{
double a, b, r, x, y, w, t;
scanf(“%lf%lf%lf%lf%lf%lf%lf”, &a, &b, &r, &x, &y, &w, &t);
double bx = a + r cos(wt);
double by = b + r sin(wt);
double k = (by - y) / (bx - x);//斜率k
double l = y - k x;
double d = pow(k
a - b + l, 2) / (k k + 1);//点到直线的距离公式
double ans = sqrt(r
r - d) * 2;
printf(“%.2lf\n”, ans);
}
return 0;
}


坚持原创技术分享,您的支持将鼓励我继续创作!
  • 本文作者: Fayne
  • 本文链接: 358.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!