hdu 4741

虽然知道知道是个水题,不过由于线代学的不好···解不出方程。。。后面参考了下http://blog.sina.com.cn/s/blog_648868460100h1sf.html博主写的很详细,最后过了。平常学校课堂上教的那些知识还是很重要啊。

#include<cstdio>
#include<cstdlib>
#include<math.h>

double x1,x2,x3,x4,yy,y2,y3,y4,z1,z2,z3,z4,a,b,c,x,y,z;

void find(){
     double H=x2-x1, I=y2-yy, J=z2-z1;
     double K=x4-x3, L=y4-y3, M=z4-z3;
     double N=H*I*L-I*I*K-J*J*K+H*J*M;
     double O=H*H*L-H*I*K-I*J*M+J*J*L;
     double P=H*J*K-H*H*M-I*I*M+I*J*L;
     double Q=-x1*N+yy*O-z1*P; 
     double k=(O*y3-N*x3-P*z3-Q)/(N*K-O*L+P*M);
     x=K*k+x3;
     y=L*k+y3;
     z=M*k+z3;
     H=x4-x3, I=y4-y3, J=z4-z3;
     K=x2-x1, L=y2-yy, M=z2-z1;
     N=H*I*L-I*I*K-J*J*K+H*J*M;
     O=H*H*L-H*I*K-I*J*M+J*J*L;
     P=H*J*K-H*H*M-I*I*M+I*J*L;
     Q=-x3*N+y3*O-z3*P; 
     k=(O*yy-N*x1-P*z1-Q)/(N*K-O*L+P*M);
     a=K*k+x1;
     b=L*k+yy;
     c=M*k+z1;
}

int main(){
     int t;
     scanf("%d",&t);
     while(t--){
         scanf("%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",&x1,&yy,&z1,&x2,&y2,&z2,&x3,&y3,&z3,&x4,&y4,&z4);   
         find();          
         double dis = sqrt((x-a)*(x-a)+(y-b)*(y-b)+(z-c)*(z-c));
         printf("%lf\n",dis);
         printf("%lf %lf %lf ",a,b,c);
         printf("%lf %lf %lf\n",x,y,z);
         
     }
     return 0; 
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值