Calc函数即为求某点到P点的距离。
#include<iostream> #include<cstdlib> #include<stdio.h> #include<memory.h> #include<math.h> #define eps 1e-8 using namespace std; struct point { double x,y,z; }; point l,r,p; point MID(point a,point b) { point k; k.x=(a.x+b.x)*0.5; k.y=(a.y+b.y)*0.5; k.z=(a.z+b.z)*0.5; return k; } double dist(point a,point b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z)); } int sgn(double a) { return (a>eps)-(a<-eps); } point work() { point mid,midmid; while(sgn(dist(l,r))>0) { mid=MID(l,r); midmid=MID(mid,r); if(dist(mid,p)<dist(midmid,p)) r=midmid; else l=mid; } return r; } int main() { int t,i,j,k,cas=1; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf",&p.x,&p.y,&p.z); scanf("%lf%lf%lf",&l.x,&l.y,&l.z); scanf("%lf%lf%lf",&r.x,&r.y,&r.z); l=work(); printf("Case %d: %.2lf\n",cas++,dist(l,p)); } return 0; }