题目:http://acm.hdu.edu.cn/showproblem.php?pid=4741

题意:给定两条异面直线,求它们最近的距离和对应的坐标。

#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. 65 ---- 点到平面、点到直线 及异面直线间的距离

  2. 电子计算机应用地质地貌,岩土基础整理 一、高数24 1、空间解析几何与向量代数 两点间的距离,向量数量积,向量向量积,平面方程,两平面夹角,点到平面的距离,点... - 雪球...

    来源:雪球App,作者: 超级奶爸xujunhorse,(https://xueqiu.com/3442498082/131579485) 一.高数24 1.空间解析几何与向量代数 两点间的距离,向量 ...

  3. 【HDU4741】空间解析几何

    1.题目链接.题目大意:给出两条空间中不平行的直线,求出这两条直线的距离和对应的点. 2.分析:在空间中我们知道,直线有三种关系:相交,平行,异面.但是题目中已经说了,是不相交的直线,所以只可能有两种 ...

  4. 高等数学:第七章 空间解析几何(1)空间解析几何与向量代数 向量的加减法、数乘、坐标

    §7.1  空间直角坐标系 一.空间点的直角坐标 平面直角坐标系使我们建立了平面上的点与一对有序数组之间的一一对应关系,沟通了平面图形与数的研究. 为了沟通空间图形与数的研究, 我们用类似于平面解析几 ...

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

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

  6. 高等数学(下)空间解析几何与向量代数

    1 向量代数 1.1 向量及其线性运算 1.1.1 方向角与方向余弦 1.1.1.1 定义 1.1.1.2 计算法 1.2 数量积 向量积 混合积 1.2.1 数量积 1.2.1.1 定义 1.2.1 ...

  7. Math_Calculus_07_向量代数与空间解析几何

    http://kjwy.5any.com/gdsx22/other/kcjg/index.htm 第七章 向量代数与空间解析几何 §7.1 空间直角坐标系 7.1.1 空间点的直角坐标系 过空间一个定 ...

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

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

  9. 函数空间(巴纳赫空间、欧几里得空间、希尔伯特空间)

    函数空间:人为定义的满足一定规则的对象所组成集合. 我们最常用到的规则为:拓扑.距离.范数.内积: 它们的限制是依次增强的,如果拓扑是植物,那么距离就是水果,范数就是热带水果,内积就是热带甜味水果. ...

最新文章

  1. JPG图片EXIF信息提取工具exif
  2. aitken插值方法的c++代码_无人驾驶路径规划技术-三次样条插值曲线及Python代码实现...
  3. C语言程序练习-L1-002 打印沙漏 (20分)
  4. RecycleView弹性滑动
  5. 【在路上4】在派件时效分析中剥离有效因素
  6. 从RSS Feed和YQL创建数据表
  7. 《Python Cookbook 3rd》笔记(4.11):同时迭代多个序列
  8. [Jmeter] 基本使用的总结
  9. 2020年中国OTT大屏服务行业研究报告
  10. 666! 玩王者,识英雄,这样也能上顶会!
  11. Matlab线性/非线性规划优化算法(1)
  12. Entity Framework 6.x - Code First 默认创建数据库的位置
  13. [轉]MS SQL 显示表结构
  14. 毕业后想拿大厂offer?你得完整拥有这些计算机知识体系!
  15. 大数据给企业带来的好处有哪些
  16. anaconda3+pytorch踩坑
  17. 记一次mybatis-plus遇到的问题
  18. 人脸识别 (4) 人脸对齐
  19. 完美解决python3.6环境下,使用pyinstaller打包.exe时报错的情况。
  20. 新一轮的XNA学习开始

热门文章

  1. 自定义线程池-线程池类和测试类编写
  2. Set集合存储元素不重复的原理
  3. HDFS的Secondarynamenode工作机制
  4. StringBuilder的构造方法和append方法
  5. 记一次CentOS Install Docker 报错
  6. mysql_safe后重启_mysql无限重启是什么情况
  7. Spring Cloud Gateway 源码解析(3) —— Predicate
  8. Java Agent
  9. 多重循环控制(难点重点)
  10. 代画PCB及C语言编程