简单几何题,画个图形就可以得到结果了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std ;
struct line{
double l,r;
}L[1000];
bool operator <(const line &a,const line &b){
return a.l<b.l;
}
int main()
{
int n;
double x,y,x1,y1,r,l;
while(cin>>n,n){
cin>>x>>y;
for(int i=0;i<n;i++){
scanf("%lf %lf %lf",&x1,&y1,&r);
double d=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
double a=asin(r/d);
double b=asin((x-x1)/d);
double O1=a+b,O2=b-a;
L[i].l=x-y*tan(O1);
L[i].r=x-y*tan(O2);
}
sort(L,L+n);
l=L[0].l,r=L[0].r;
for(int i=0;i<n;i++){
if(L[i].l>r){
printf("%.2f %.2f\n",l,r);
l=L[i].l,r=L[i].r;
}
else {
r=max(r,L[i].r);
}
}
printf("%.2f %.2f\n",l,r);
puts("");
}
return 0 ;
}