Save Labman No.004

#include <stdio.h>
#include <math.h>
using namespace std;
int main(){
    int ca;
double x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4,s,t,a,b,c,d,e,f,g,h,i,p,q,r,D,t1,t2,D1,D2;
    scanf("%d",&ca);
    while(ca--){
    scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&z1,&x2,&y2,&z2,&x3,&y3,&z3,&x4,&y4,&z4);
    p=(y2-y1)*(z4-z3)-(y4-y3)*(z2-z1);
    q=(x4-x3)*(z2-z1)-(x2-x1)*(z4-z3);
    r=(x2-x1)*(y4-y3)-(x4-x3)*(y2-y1);
    a=x2-x1,b=y2-y1,c=z2-z1,d=x4-x3,e=y4-y3,f=z4-z3;
    g=x1-x3,h=y1-y3,i=z1-z3;
    D=(b*r-c*q)*(e*p-d*q)-(a*q-p*b)*(f*q-e*r);
    D1=(q*i-h*r)*(e*p-d*q)-(f*q-e*r)*(p*h-g*q);
    D2=(b*r-c*q)*(p*h-g*q)-(a*q-p*b)*(q*i-h*r);
    t1=D1/D,t2=D2/D;
    x1+=t1*a,y1+=t1*b,z1+=t1*c;
    x3+=t2*d,y3+=t2*e,z3+=t2*f;
    printf("%.6lf\n%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n",sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)+(z1-z3)*(z1-z3)),x1,y1,z1,x3,y3,z3);
    }
    return 0;
}
空间中已知4点,求出两直线间最短距离,不存在平行情况
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值