合工大OJ_Problem1356 转啊转

本篇介绍了一个编程问题,需要计算一个在圆上以特定角速度旋转的动点与固定点形成的直线,在某时刻与圆相交的线段长度。提供了完整的C++代码实现,包括输入数据解析及利用几何原理进行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目不难,注意圆上点的坐标就行,高中数学知识



// 先输入一个整数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 MSMemory Limit: 65536 KB
Total Submissions: 678Accepted: 173

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


Source


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值