C++Point Segment Distance (3D)

#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)/3
2;
}
else
{
a=a+(b-a)/3;
}
}
p1_x=x1+x3a;
p1_y=y1+y3
a;
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值