hdu 4741 Save Labman No.004
来源:互联网 发布:深圳市房地产交易数据 编辑:程序博客网 时间:2024/06/05 12:50
题目大意:求空间两条直线的最短距离及最近的点坐标
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4741
拙计的代码,公垂线~~~~~~~~~
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;struct node{ double x,y,z;}p[20],dir1,dir2,dir3,dir,ans,res;struct line{ node a,b;}l1,l2;int main(){ int T; scanf("%d",&T); while(T--){ for(int i = 0; i < 4; i ++) scanf("%lf %lf %lf",&p[i].x,&p[i].y,&p[i].z); l1.a = p[0],l1.b = p[1]; dir1.x = p[0].x - p[1].x, dir1.y = p[0].y - p[1].y, dir1.z = p[0].z - p[1].z; l2.a = p[2],l2.b = p[3]; dir2.x = p[2].x - p[3].x, dir2.y = p[2].y - p[3].y, dir2.z = p[2].z - p[3].z; double e,f,g; e = dir1.y*dir2.z - dir2.y*dir1.z; f = dir1.z*dir2.x - dir2.z*dir1.x; g = dir1.x*dir2.y - dir2.x*dir1.y; dir3.x = p[2].x - p[0].x, dir3.y = p[2].y - p[0].y, dir3.z = p[2].z - p[0].z; double an = (e*dir3.x + f*dir3.y + g*dir3.z)/(sqrt(e*e + f*f + g*g)); printf("%.6lf\n",fabs(an)); dir.x = e, dir.y = f , dir.z = g; res.x = dir3.y*dir2.z - dir3.z *dir2.y; res.y = dir3.z*dir2.x - dir3.x *dir2.z; res.z = dir3.x*dir2.y - dir3.y *dir2.x; double t1 = res.x * dir.x + res.y * dir.y + res.z * dir.z; t1 /= dir.x * dir.x + dir.y *dir.y + dir.z *dir.z; ans.x = p[0].x + dir1.x * t1; ans.y = p[0].y + dir1.y * t1; ans.z = p[0].z + dir1.z * t1; printf("%.6lf %.6lf %.6lf ",ans.x,ans.y,ans.z); res.x = dir3.y*dir1.z - dir3.z *dir1.y; res.y = dir3.z*dir1.x - dir3.x *dir1.z; res.z = dir3.x*dir1.y - dir3.y *dir1.x; t1 = res.x * dir.x + res.y * dir.y + res.z * dir.z; t1 /= dir.x * dir.x + dir.y *dir.y + dir.z *dir.z; ans.x = p[2].x + dir2.x * t1; ans.y = p[2].y + dir2.y * t1; ans.z = p[2].z + dir2.z * t1; printf("%.6lf %.6lf %.6lf\n",ans.x,ans.y,ans.z); } return 0;}
- hdu 4741 Save Labman No.004
- hdu 4741 Save Labman No.004
- hdu 4741 Save Labman No.004
- HDU 4741 Save Labman No.004
- HDU 4741 Save Labman No.004
- HDU 4741 Save Labman No.004
- [HDU 4741]Save Labman No.004[计算几何][精度]
- hdu 4741 Save Labman No.004(计算几何)
- hdu 4741——Save Labman No.004
- Save Labman No.004
- POJ 4741 Save Labman No.004
- HDU4741 Save Labman No.004
- hdu 4741 Save Labman No.004 [2013年杭州ACM网络赛]
- hdu 4741 Save Labman No.004(2013杭州网络赛)
- HDU 4741 Save Labman No.004 2013 ACM/ICPC 杭州网络赛
- hdu 4741 Save Labman No.004 (求异面直线距离及交点)
- hdu 4741 Save Labman No.004 异面直线最短距离及对应的点
- HDU 4741 Save Labman No.004 (异面直线距离&直线与平面的交点)
- 牛顿迭代法快速寻找平方根
- Lync 2010 升级到Lync 2013 之Lync 2010 后端安装!
- 轻松搞定面试中的链表题目
- OS1 绪论
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- hdu 4741 Save Labman No.004
- hdu 1023 - Train Problem
- 访问本地服务里面的方法
- eclipse maven plugin 插件 安装 和 配置
- HDU4739
- 调试小技巧
- Eclipse中在线安装Genymotion插件
- HDU 2242(考研路茫茫——空调教室)
- 数字图像处理--几个MATLAB函数