现在的位置: 首页 > 综合 > 正文

hdu4741

2014年08月29日 ⁄ 综合 ⁄ 共 1034字 ⁄ 字号 评论关闭

//坑爹,因为一个符号调试了好久

#include<stdio.h>  
#include<math.h>
double Xa,Ya,Za,Xb,Yb,Zb,Xc,Yc,Zc,Xd,Yd,Zd;
double d,fix[2],fiy[2],fiz[2];
void dist()
{
	double H,I,J,K,L,M,N,O,P,Q;
	double t;
	H=Xb-Xa;	I=Yb-Ya;	J=Zb-Za;
	K=Xd-Xc;    L=Yd-Yc;    M=Zd-Zc;
	N=(H*L-K*I)*I-(J*K-M*H)*J;
	O=(I*M-J*L)*J-H*(H*L-K*I);
	P=H*(J*K-M*H)-(I*M-J*L)*I;
	Q=-(N*Xa+O*Ya+P*Za);//N O P Q是直线L1与公垂线方向向量组成平面的方程的系数
	t=-(N*Xc+O*Yc+P*Zc+Q)/(N*K+O*L+P*M);//t为直线L2的参数
	fix[1]=K*t+Xc;
	fiy[1]=L*t+Yc;
	fiz[1]=M*t+Zc;
	N=(H*L-K*I)*L-(J*K-M*H)*M;
	O=(I*M-J*L)*M-K*(H*L-K*I);
	P=K*(J*K-M*H)-(I*M-J*L)*L;
	Q=-(N*Xc+O*Yc+P*Zc);//N O P Q是直线L2与公垂线方向向量组成平面的方程的系数
	t=-(N*Xa+O*Ya+P*Za+Q)/(N*H+O*I+P*J);//t为直线L1的参数
	fix[0]=H*t+Xa;
	fiy[0]=I*t+Ya;
	fiz[0]=J*t+Za;
	d=sqrt((fix[1]-fix[0])*(fix[1]-fix[0])+(fiy[1]-fiy[0])*(fiy[1]-fiy[0])+(fiz[1]-fiz[0])*(fiz[1]-fiz[0]));
}
main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%lf%lf%lf",&Xa,&Ya,&Za);
		scanf("%lf%lf%lf",&Xb,&Yb,&Zb);
		scanf("%lf%lf%lf",&Xc,&Yc,&Zc);
		scanf("%lf%lf%lf",&Xd,&Yd,&Zd);
		dist();	
		printf("%.6lf\n",d);
		printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n",fix[0],fiy[0],fiz[0],fix[1],fiy[1],fiz[1]);
	}
	return 0;
}

抱歉!评论已关闭.