hdu4741
2013-09-17 17:17
316 查看
//坑爹,因为一个符号调试了好久
#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; }
相关文章推荐
- 如何判断一个点是否在一个多边形内部(有向面积)
- 三角形外心的坐标公式
- 63.[GIS基础]向量及其运算
- 62.[GIS基础]笛卡尔坐标系
- sdut 2603 Rescue The Princess(算是解析几何吧)(山东省第四届ACM省赛A题)
- Sdut 2416 Fruit Ninja II(山东省第三届ACM省赛 J 题)(解析几何)
- POJ2354-Titanic
- POJ1673-EXOCENTER OF A TRIANGLE
- POJ1106-Transmitters
- POJ1375-Intervals
- 解析几何:第六章 二次曲面(2)抛物面 二次锥面 柱面 一般二次曲面
- 解析几何:第六章 二次曲面(1)球面 椭球面 双曲面
- 解析几何:第五章 二次曲线(2)抛物线 一般二次曲线
- 解析几何:第五章 二次曲线(1)圆 椭圆 双曲线
- 解析几何:第四章 空间中的直线与平面(2)空间中点到直线、平面的距离、平面之间的关系、直线与直线、直线与平面的相互关系
- 解析几何:第四章 空间中的直线与平面(1)空间直线的方向、平面方程、空间直线方程
- 解析几何:第三章 平面上的直线
- 解析几何:第二章 解析几何中的基本计算公式
- 解析几何:第一章坐标系与坐标变换:平面直角坐标系、空间直角坐标系及其变换、极坐标系,圆柱面坐标系,球面坐标系
- 线性代数(五十) :向量积