#include<bits/stdc++.h>
using namespace std;
double le(double x1,double y1,double z1,double x2,double y2,double z2)
{
double ans=sqrt((x2-x1)(x2-x1)+(y2-y1)(y2-y1)+(z2-z1)(z2-z1));
return ans;
}
int main()
{
long long t;
double l=0,r=1,p1_x,p2_x,p1_y,p2_y,p1_z,p2_z,d1,d2,x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3;
cin>>t;
for(long long tt=1;tt<=t;tt++)
{
cin>>x1>>y1>>z1>>x2>>y2>>z2>>x>>y>>z;
x3=x2-x1;
y3=y2-y1;
z3=z2-z1;
double a=0;
double b=1;
while(b-a>1e-9)
{
p1_x=x1+x3(a+(b-a)/3);
p1_y=y1+y3*(a+(b-a)/3);
p1_z=z1+z3*(a+(b-a)/3);
p2_x=x1+x3*(a+(b-a)/32);
p2_y=y1+y3(a+(b-a)/32);
p2_z=z1+z3(a+(b-a)/32);
d1=le(p1_x,p1_y,p1_z,x,y,z);
d2=le(p2_x,p2_y,p2_z,x,y,z);
if(d2-d1>0)
{
b=a+(b-a)/32;
}
else
{
a=a+(b-a)/3;
}
}
p1_x=x1+x3a;
p1_y=y1+y3a;
p1_z=z1+z3*a;
double ret = le(p1_x,p1_y,p1_z,x,y,z);
cout<<“Case “<<tt<<”: “;
printf(”%.8lf\n”,ret);
}
return 0;
}
C++Point Segment Distance (3D)
最新推荐文章于 2024-07-08 09:17:34 发布