poj1675——Happy Birthday!//atan2求角度

本文介绍了一种算法,用于判断三个点是否可以被均匀地分布在圆内的三个区域中。通过使用atan2函数计算各点相对于圆心的角度,并判断两两之间夹角是否大于120度来实现。

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

题意:判断能否把三个点划分在圆的三个均等区域内。

思路:利用atan2(y,x)求角度,求出的范围为-pi~pi。逆时针的角度为正。判断每两个点之间的夹角是否大于120。这边的夹角指的是两个点之间,能把第三个点包含进去的那个方向。atan()不能计算(0,0)的情况,所以,(0,0)的情况单独判断。

#include<iostream> #include<cmath> #include<cstdio> #include<algorithm> using namespace std; #define pi 3.1415926 void solve(double a[]) { if((360-abs(a[1]-a[0]))<120) { printf("No\n"); return ; } if(abs(a[2]-a[0])<120) { printf("No\n"); return ; } if((360-abs(a[2]-a[1]))<120) { printf("No\n"); return ; } printf("Yes\n"); } int main() { int test; double r,x1,y1,x2,y2,x3,y3; cin>>test; while(test--) { cin>>r>>x1>>y1>>x2>>y2>>x3>>y3; if(x1==0&&y1==0) cout<<"No"<<endl; else if(x2==0&&y2==0) cout<<"No"<<endl; else if(x3==0&&y3==0) cout<<"No"<<endl; else { double a[4]; a[0]=(180.0/pi)*atan2(y1,x1)+180; a[1]=(180.0/pi)*atan2(y2,x2)+180; a[2]=(180.0/pi)*atan2(y3,x3)+180; sort(a,a+3); solve(a); } } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值