题目多读几次就明白了。主要是求异面直线的距离,然后用距离和两圆半径之和作比较。

空间直线的距离d=|AB*n| / |n| (AB表示异面直线任意2点的连线,n表示法向量,法向量为两条异面直线方向向量的叉积,|n|表示模。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6.  
  7. using namespace std;
  8. const int MAXN=50;
  9. const double eps=1e-8;
  10. struct point {
  11. double x,y,z;
  12. };
  13. struct line {
  14. point a,b;
  15. double r;
  16. };
  17. int n;
  18. point tmp[3]; line le[MAXN];
  19. point vectical;
  20.  
  21. point operator - (const point &a, const point &b){ //减法
  22. point t;
  23. t.x=a.x-b.x; t.y=a.y-b.y; t.z=a.z-b.z;
  24. return t;
  25. }
  26. point operator ^ (const point &u, const point &v){ //叉乘
  27. point t;
  28. t.x=u.y*v.z-v.y*u.z; t.y=u.z*v.x-u.x*v.z; t.z=u.x*v.y-u.y*v.x;
  29. return t;
  30. }
  31.  
  32. point operator + (const point &a, const point &b){
  33. point t;
  34. t.x=a.x+b.x; t.y=a.y+b.y; t.z=a.z+b.z;
  35. return t;
  36. }
  37.  
  38. double operator *(const point &a, const point &b){
  39. return a.x*b.x+a.y*b.y+a.z*b.z;
  40. }
  41.  
  42. double dist(point &a, point &b){
  43. double tx=a.x-b.x; double ty=a.y-b.y; double tz=a.z-b.z;
  44. return sqrt(tx*tx+ty*ty+tz*tz);
  45. }
  46.  
  47. double len (point &t){
  48. return sqrt(t.x*t.x+t.y*t.y+t.z*t.z);
  49. }
  50.  
  51. int main(){
  52. int T;
  53. scanf("%d",&T);
  54. while(T--){
  55. scanf("%d",&n);
  56. for(int i=0;i<n;i++){
  57. for(int j=0;j<3;j++)
  58. scanf("%lf%lf%lf",&tmp[j].x,&tmp[j].y,&tmp[j].z);
  59. le[i].a=tmp[0];
  60. vectical=(tmp[1]-tmp[0])^(tmp[2]-tmp[0]);
  61. le[i].b=le[i].a+vectical;
  62. le[i].r=dist(tmp[1],tmp[0]);
  63. }
  64. bool flag=false;
  65. double ans=1e10;
  66. for(int i=0;i<n;i++){
  67. for(int j=0;j<n;j++){
  68. if(i!=j){
  69. vectical=(le[i].a-le[i].b)^(le[j].a-le[j].b);
  70. point tt=le[i].a-le[j].a;
  71. double dd=fabs((tt*vectical))/len(vectical);
  72. if(dd<=le[i].r+le[j].r){
  73. flag=true;
  74. break;
  75. }
  76. else ans=min(ans,dd-le[i].r-le[j].r);
  77. }
  78. }
  79. if(flag)break;
  80. }
  81. if(flag) printf("Lucky\n");
  82. else printf("%.2lf\n",ans);
  83. }
  84. return 0;
  85. }

  

HDU 4617的更多相关文章

  1. hdu 4617 Weapon

    http://acm.hdu.edu.cn/showproblem.php?pid=4617 三维几何简单题 多谢高尚博学长留下的模板 代码: #include <iostream> #i ...

  2. hdu 4617 Weapon【异面直线距离——基础三维几何】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4617 Weapon Time Limit: 3000/1000 MS (Java/Others)     ...

  3. HDU 4617 Weapon 三维计算几何

    题意:给你一些无限长的圆柱,知道圆柱轴心直线(根据他给的三个点确定的平面求法向量即可)与半径,判断是否有圆柱相交.如果没有,输出柱面最小距离. 一共只有30个圆柱,直接暴力一下就行. 判相交/相切:空 ...

  4. HDU 4617 Weapon (简单三维计算几何,异面直线距离)

    Weapon Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Subm ...

  5. hdu 4617 Weapon(叉积)

    大一学弟表示刚学过高数,轻松无压力. 我等学长情何以堪= = 求空间无限延伸的两个圆柱体是否相交,其实就是叉积搞一搞 详细点就是求两圆心的向量在两直线(圆心所在的直线)叉积上的投影 代码略挫,看他的吧 ...

  6. HDU 4617 Weapon(三维几何)

    Problem Description Doctor D. are researching for a horrific weapon. The muzzle of the weapon is a c ...

  7. 【 2013 Multi-University Training Contest 2 】

    HDU 4611 Balls Rearrangement 令lcm=LCM(a,b),gcd=GCD(a,b).cal(n,a,b)表示sum(abs(i%a-i%b)),0<=i<n. ...

  8. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

随机推荐

  1. 浅谈JavaScript中的cookie

    什么是cookie?简单来说,cookie就是网站服务器存放在我们计算机上的一小段(一般大小不超过4KB)用来识别和记录用户的个人信息的文本.HTTP协议是一种没有“状态”的传输协议,也就是说,服务器 ...

  2. Django day08 多表操作 (一) 多表模型创建

    多表模型创建分析:1)作者表:一个作者有姓名和年龄2)作者信息表: 有作者就有信息,点击作者的名字可以查询他的电话和地址, 作者表对应作者信息表,所以他们之间是一对一对的关系3)出版社表: 出版社有对 ...

  3. tp 3.1.3 动态切换模板问题

    if($this->isMobile()) { C('DEFAULT_THEME', 'mobile'); // 这里定义手机模板目录 C('TMPL_CACHE_PREFIX', 'm_'); ...

  4. Win10 计算机管理 打不开应急办法

    最近Win10重置以后,计算机管理打不开了,经过一番尝试,通过以下命令在cmd下面可以直接打开 compmgmt 或者compmgmt.msc打开 在次特做一个记录,以备急用

  5. ACM_鸡兔同笼(二元一次方程)

    鸡兔同笼 Time Limit: 2000/1000ms (Java/Others) Problem Description: 今有雉兔同笼,上有n头,下有m足,问雉兔各几何? Input: 输入有多 ...

  6. HTML <!DOCTYPE>标签 各版本对应的标签是否有无

    参考来源: http://www.w3school.com.cn/tags/html_ref_dtd.asp HTML5/HTML 4.01/XHTML 元素和有效的 DTD 下面的表格列出了所有的 ...

  7. 另一种压缩图片的方法---Machine learning 之 PCA(Principle Component Analysis)

    PCA最主要的用途是用来减少特征向量的数目,N个特征向量 减小到 K个特征向量.如果为了可视化,k可以使3 或者 2.这样可以加速算法的学习速度. PCA用来压缩图像同一有效. 具体方式以及原理在gi ...

  8. Django学习案例一(blog):六. 开发博客内容页面

    目标:某条博客具体内容的展示,可返回博客主页面,可进行评论. 1. 编辑路由 一篇博客,要将其找出来,就需要有一个唯一的标识.Django 的模型中默认有一个唯一的且未自增长的主键,即 id 字段.我 ...

  9. swiper和Navigator组件

    <swiper class="index-banner" indicator-dots="{{true}}" autoplay="{{true} ...

  10. dataGridView 设置

    //窗体加载事件 //内容居中 dataGridView1.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCe ...