题目大意:给出地球外的k个点,地球表面的m个点,求地球外的点是否能看见地球表面的点
解题思路:地球外的点对地球做切线,若地球往外的点到地球表面点的距离<=切线距离,则能看到
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 100+10;
const double PI=acos(-1.0);
struct Point
{
double x,y,z;
}p[maxn],O;
double dis(Point p1,Point p2)
{
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)+(p1.z-p2.z)*(p1.z-p2.z));
}
int main()
{
int k,m ;
while(scanf("%d%d",&k,&m),(k||m))
{
O.x = O.y = O.z = 0;
for(int i = 0; i < k; i++)
scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z);
double r = 20000.0/PI;
int ans = 0;
while(m--)
{
Point target;
scanf("%lf%lf%lf",&target.x,&target.y,&target.z);
for(int i = 0; i < k; i++)
if(dis(p[i],O)*dis(p[i],O) >= r*r+dis(p[i],target)*dis(p[i],target))
{
ans++;
break;
}
}
printf("%d\n",ans);
}
return 0;
}