http://acm.hdu.edu.cn/showproblem.php?pid=4617

三维几何简单题 多谢高尚博学长留下的模板

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std; typedef long long ll;
typedef pair<double,double>ppd;
const double PI = acos(-1.);
const int MAXL = (1 << 18)+100;
const double eps = (1e-9);
const int N=50;
struct point3{double x,y,z;};
struct line3{point3 a,b;};
double r[N];
line3 L[N];
int dcmp(double x)
{
if(fabs(x)<eps) return 0;
return x<0?-1:1;
}
point3 xmult(point3 u,point3 v)
{
point3 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 dmult(point3 u,point3 v)
{
return u.x*v.x+u.y*v.y+u.z*v.z;
}
point3 subt(point3 u,point3 v)
{
point3 ret;
ret.x=u.x-v.x;
ret.y=u.y-v.y;
ret.z=u.z-v.z;
return ret;
}
double vlen(point3 p)
{
return sqrt(p.x*p.x+p.y*p.y+p.z*p.z);
}
double dist(point3 u,point3 v)
{
return (double)(sqrt((u.x-v.x)*(u.x-v.x)+(u.y-v.y)*(u.y-v.y)+(u.z-v.z)*(u.z-v.z)));
}
double ptoline(point3 p,line3 l)
{
l.b.x=l.a.x+l.b.x;
l.b.y=l.a.y+l.b.y;
l.b.z=l.a.z+l.b.z;
return vlen(xmult(subt(p,l.a),subt(l.b,l.a)))/dist(l.a,l.b);
}
double linetoline(line3 u,line3 v)
{
point3 n=xmult(u.b,v.b);
if(dcmp(vlen(n))==0)
return ptoline(u.a,v);
return fabs(dmult(subt(v.a,u.a),n))/vlen(n);
}
point3 pvec(point3 s1,point3 s2,point3 s3)
{
return xmult(subt(s1,s2),subt(s2,s3));
} int main()
{
//freopen("data.in","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;++i)
{
point3 p[3];
for(int j=0;j<3;++j)
scanf("%lf %lf %lf",&p[j].x,&p[j].y,&p[j].z);
L[i].a=p[0];
L[i].b=pvec(p[0],p[1],p[2]);
r[i]=dist(p[0],p[1]);
}
double k=1e9;
for(int i=0;i<n;++i)
for(int j=i+1;j<n;++j)
{
//cout<<linetoline(L[i],L[j])<<endl;
k=min(k,linetoline(L[i],L[j])-r[i]-r[j]);
}
if(dcmp(k)<=0)
printf("Lucky\n");
else
printf("%.2lf\n",k); }
return 0;
}

hdu 4617 Weapon的更多相关文章

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

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

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

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

  3. HDU 4617 Weapon(三维几何)

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

  4. HDU 4617 Weapon 三维计算几何

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

  5. hdu 4617 Weapon(叉积)

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

  6. HDU 4617

    题目多读几次就明白了.主要是求异面直线的距离,然后用距离和两圆半径之和作比较. 空间直线的距离d=|AB*n| / |n| (AB表示异面直线任意2点的连线,n表示法向量,法向量为两条异面直线方向向量 ...

  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. HDU 3341 Lost's revenge(AC自动机+DP)

    Lost's revenge Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)T ...

  9. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

随机推荐

  1. sqlserver 批量删除存储过程(转)

    sqlserver一次只能删除一个存储过程,如果多了,需要很长时间才能删完,所以写了一段语句,直接就把当然数据库下所有用户自定义的存储过程给drop了.不过使用都请留心,当前打开的数据库哦.下面贴代码 ...

  2. Python学习(7)数字

    目录 Python 数字 Python 数字类型转换 Python 数学函数 Python 随机数函数 Python 三角函数 Python 数学常量 Python 数字 Python 数字数据类型用 ...

  3. [css] 浏览器字体和css设置字体之间的关系

    原文链接:http://www.zhangxinxu.com/wordpress/2010/06/%E5%8F%AF%E7%94%A8%E6%80%A7%E4%B9%8B%E6%B5%8F%E8%A7 ...

  4. js 重点 (转载)

  5. 转:strcat与strcpy与strcmp与strlen

    转自:http://blog.chinaunix.net/uid-24194439-id-90782.html strcat 原型:extern char *strcat(char *dest,cha ...

  6. 转:浅谈C/C++中的指针和数组(一)

    再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...

  7. 华为 1.static有什么用途?(请至少说明两种)

    1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问 ...

  8. windows下重新安装TCP/IP协议栈

    一.windows重装TCP/IP协议     前两天在windows下安装开发环境的时候,把系统的TCP/IP协议栈给搞跪了,导致系统无法ping localhost.无法在程序中创建socket等 ...

  9. WebDriver 页面等待

    selenium2.4.0版本提供了页面等待处理. 显示等待元素可见: protected void WaitElementVisible(By by,int timeOutInSeconds, lo ...

  10. dede在线留言

    登录dede后台,在[核心]---[频道维护]---[自定义表单]中根据需要创建需要的表单.   点击[增加新的自定义表单],添加在线留言表单.确定即可. 注意: ①在这里只需要修改[自定义表单名称: ...