1.题目链接。题目大意:给出两条空间中不平行的直线,求出这两条直线的距离和对应的点。

2.分析:在空间中我们知道,直线有三种关系:相交,平行,异面。但是题目中已经说了,是不相交的直线,所以只可能有两种关系,平行或者异面。在空间中,直线方程并不是很好用(行吧,或者说我不会用)。虽然说这是一个计算几何模板题,但是还是希望可以明白其中道理。

3.我们从向量的角度来考虑这个问题那么我们就不用考虑很多的位置关系。首先是求距离,求距离很简单了,我们可以利用叉积求出这两个向量的公共法向量,然后再在这两条直线上各取一点,求这两点之间的距离在法向量上的投影即可。交点该怎么求呢?我们可以通过求线与面的交点求得。根据法向量,我们可以确定每条直线各自所在的一个平面,并且这个平面是包含法向量的,这样的平面根据几何公理,有且仅有一个。(其实也就是空间解析几何中常用的:两点和垂直于这两点连线的直线可以共同确定一个平面)其实最短距离对应的两个点,就是法向量和这两个平面的交点。至于如何求平面和直线的交点,其实好求,就是求这个直线在法向量方向的偏移。

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
using namespace std;
const double eps = 1e-8;
//三维空间点
struct Point
{double x, y, z;Point(double x = 0, double y = 0, double z = 0) : x(x), y(y), z(z) {}Point(const Point& a){x = a.x;y = a.y;z = a.z;return;}void Print(){printf("%lf %lf %lf\n", x, y, z);}Point operator + (Point &t){return Point(x + t.x, y + t.y, z + t.z);}
};
//空间直线
struct Line
{Point a, b;
};
//空间平面
struct Plane
{Point a, b, c;Plane() {}Plane(Point a, Point b, Point c) :a(a), b(b), c(c) {}void showPlane(){a.Print();b.Print();c.Print();return;}
};
double dcmp(double t)
{if (fabs(t) < eps) return 0;return t < 0 ? -1 : 1;
}
//三维叉积
Point cross(Point u, Point v)
{Point ret;ret.x = u.y * v.z - v.y * u.z;ret.y = u.z * v.x - u.x * v.z;ret.z = u.x * v.y - u.y * v.x;return ret;
}
//三维点积
double multi(Point u, Point v)
{return u.x * v.x + u.y * v.y + u.z * v.z;
}
//矢量差
Point sub(Point u, Point v)
{Point ret;ret.x = u.x - v.x;ret.y = u.y - v.y;ret.z = u.z - v.z;return ret;
}
//两点距离
double dist(Point p1, Point p2)
{return sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y) + (p1.z - p2.z)*(p1.z - p2.z));
}
//向量的模
double VectorLength(Point p)
{return sqrt(p.x*p.x + p.y*p.y + p.z*p.z);
}
//空间直线距离
double LineToLine(Line u, Line v, Point &tmp)
{tmp = cross(sub(u.a, u.b), sub(v.a, v.b));return fabs(multi(sub(u.a, v.a), tmp)) / VectorLength(tmp);
}
//取平面法向量
Point normalVector(Plane s)
{return cross(sub(s.a, s.b), sub(s.b, s.c));
}
//空间平面与直线的交点
Point Intersection(Line l, Plane s)
{Point ret = normalVector(s);double t = (ret.x*(s.a.x - l.a.x) + ret.y*(s.a.y - l.a.y) + ret.z*(s.a.z - l.a.z)) / (ret.x*(l.b.x - l.a.x) + ret.y*(l.b.y - l.a.y) + ret.z*(l.b.z - l.a.z));ret.x = l.a.x + (l.b.x - l.a.x) * t;ret.y = l.a.y + (l.b.y - l.a.y) * t;ret.z = l.a.z + (l.b.z - l.a.z) * t;return ret;
}
/************以上为模板*************/
void work(Line A, Line B)
{Point normal;double d = LineToLine(A, B, normal);printf("%.6lf\n", d);Plane alpha = Plane(A.a, A.b, A.a + normal);Plane beta = Plane(B.a, B.b, B.a + normal);Point u = Intersection(B, alpha);Point v = Intersection(A, beta);printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n", v.x, v.y, v.z, u.x, u.y, u.z);
}
int main()
{int T;scanf("%d", &T);while (T--){Line A, B;scanf("%lf%lf%lf", &A.a.x, &A.a.y, &A.a.z);scanf("%lf%lf%lf", &A.b.x, &A.b.y, &A.b.z);scanf("%lf%lf%lf", &B.a.x, &B.a.y, &B.a.z);scanf("%lf%lf%lf", &B.b.x, &B.b.y, &B.b.z);work(A, B);}return 0;
}

【HDU4741】空间解析几何相关推荐

  1. matlab求两向量夹角_高等数学之向量代数与空间解析几何知识点与题型总结

    向量代数与空间解析几何知识点: (1)向量代数知识点 (2)两平面夹角与两直线夹角公式 两平面夹角和两直线夹角公式 (3)点到直线的距离公式 点到直线的距离 (4)常见二次曲线 常见二次曲线 题型一: ...

  2. 考研:研究生考试(五天学完)之《线性代数与空间解析几何》研究生学霸重点知识点总结之第三课向量与向量空间

    考研:研究生考试(五天学完)之<线性代数与空间解析几何>研究生学霸重点知识点总结之第三课向量与向量空间 目录

  3. 高等数学笔记-乐经良老师-第七章-向量代数与空间解析几何(Ⅱ)

    高等数学笔记-乐经良老师 第七章 向量代数与空间解析几何(Ⅱ) 第四节 平面与直线 一.平面 01 确定平面方程的条件 一个平面上的点 + 一个法向量 一个平面上的点 + 两个平行于平面的不共线向量 ...

  4. 考研:研究生考试(五天学完)之《线性代数与空间解析几何》研究生学霸重点知识点总结之第五课线性方程组

    考研:研究生考试(五天学完)之<线性代数与空间解析几何>研究生学霸重点知识点总结之第五课线性方程组 目录 5 线性方程组 5.1.知识点 5.1.1.线性方程组有解的充要条件

  5. matlab在高等代数,Matlab数学软件包在向量代数-空间解析几何中的应用

    Matlab数学软件包在向量代数 一空问解析 几何中的应用 张剑宇 (辽宁轨道交通职业学院) 高等数学作为高校理工科的一门重要的数学基础课程,在 自 然科学和工程技术等诸多领域有着广泛的应用.向量代数 ...

  6. 高等数学 · 空间解析几何与向量代数理论笔记小结

    空间解析几何与向量代数理论笔记小结 一.向量代数 1. 向量的定义 2. 向量的模 3. 基本单位向量 4. 向量的方向角与方向余弦 5. 向量的坐标表示 6. 向量的线性运算 7. 向量的数量积 8 ...

  7. 空间平面方程matlab求解,向量代数和空间解析几何MATLAB求解.ppt

    向量代数和空间解析几何MATLAB求解 第11章 向量代数与空间解析几何MATLAB求解;Outline;11.1 向量及其线性运算;11.2 数量积.向量积与混合积;11.3 曲面及其方程;3.柱面 ...

  8. 高等数学 第八章 向量代数和空间解析几何

    第八章 向量代数和空间解析几何 --made by njtech Melody 文章目录 第八章 向量代数和空间解析几何 一.基本概念 二.平面 1.平面的点法式方程 2.平面的一般式方程 3.平面的 ...

  9. 考研:研究生考试(五天学完)之《线性代数与空间解析几何》研究生学霸重点知识点总结之第二课矩阵及其运算

    考研:研究生考试(五天学完)之<线性代数与空间解析几何>研究生学霸重点知识点总结之第二课矩阵及其运算 目录

最新文章

  1. 使用XML作为配置表,WinForm程序读取配置表来动态显示控件
  2. 湖北省武汉市电信IDC机房
  3. 大数据WEB阶段(十四)JavaEE开发模式
  4. scikit keras_Scikit学习,TensorFlow,PyTorch,Keras…但是天秤座呢?
  5. 第二次作业+105032014149
  6. 如何解决string转CString乱码问题?
  7. win10虚拟机搭建Hadoop集群(已完结)
  8. 看JAVA是J2EE_J2EE学习路线图
  9. 数字转换为人民币大写
  10. html的特点有哪些,HTML特点以及HTML中有哪些标签
  11. 【NOIP2015模拟10.28B组】终章-剑之魂
  12. MySQL 查询历史sql记录
  13. ArcGIS Engine10.0轻松入门级教程(1)——必备基础知识
  14. 【NLP】第11章 让你的数据说话:故事、问题和答案
  15. python可视化图表分析---pyecharts库的使用
  16. openFlow入门
  17. 数据中台是什么,不是什么,就这么拨乱反正吧 by 傅一平
  18. 蘑菇街2016招聘笔试
  19. 自动驾驶算法的KPI指标(精确率、召回率及准确率)
  20. 安卓备忘:跳转系统页面以及常见APP相应页面

热门文章

  1. 树莓派小车————避障篇
  2. Windows XP With SP3 简体中文版下载
  3. 辞职后老板提职加薪请你回去,别说我考虑一下,成熟人都懂这3点
  4. 中国科学技术大学计算机怎么样,中国科学技术大学计算机技术怎么样
  5. 微信编辑器哪个更好用
  6. javaweb基于SSM开发金院二手书流通拍卖平台
  7. 生成pdf文件并打包zip下载
  8. Avalonia 部署到麒麟信安操作系统
  9. js案例 小米秒杀倒计时 新年倒计时
  10. Vue(七)SPA 单页面及应用方式