题意:判断能否把三个点划分在圆的三个均等区域内。
思路:利用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; }