HDU 4617 Weapon (三维计算几何)
来源:互联网 发布:whatsapp是什么软件 编辑:程序博客网 时间:2024/04/28 20:33
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4617
题意:说白了就是求空间上两跳直线的距离 - 两个半径的最小值。
AC代码:
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <cstdlib>#include <cmath>#include <vector>#include <list>#include <deque>#include <queue>#include <iterator>#include <stack>#include <map>#include <set>#include <algorithm>#include <cctype>#include <ctime>#pragma comment(linker, "/STACK:16777216")using namespace std;typedef __int64 LL;const int N=50005;const int M=55555555;const int INF=0x3f3f3f3f;const double PI=acos(-1.0);const double eps=1e-7;bool zero(double x){ if(fabs(x)<eps) return true; return false;}struct point3D{ double x,y,z; point3D(){}; point3D(double a,double b,double c):x(a),y(b),z(c){} void input() { scanf("%lf%lf%lf",&x,&y,&z); } friend point3D operator -(const point3D &a,const point3D &b) { return point3D(a.x-b.x,a.y-b.y,a.z-b.z); } friend point3D operator +(const point3D &a,const point3D &b) { return point3D(a.x+b.x,a.y+b.y,a.z+b.z); }}p[33][4];double r[33];struct line{ double a,b,c,d; point3D u,v;}l[33];double vlen(point3D a){ return sqrt(a.x*a.x+a.y*a.y+a.z*a.z);}point3D xmult(point3D u,point3D v){point3D 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(point3D u,point3D v){ return u.x*v.x+u.y*v.y+u.z*v.z;}point3D get_faline(point3D a,point3D b,point3D c){ return xmult(b-a,c-a);}double xian_xian(line l1,line l2){ point3D n=xmult(l1.u-l1.v,l2.u-l2.v);return fabs(dmult(l1.u-l2.u,n))/vlen(n);}int main(){ int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { for(int j=1;j<=3;j++) p[i][j].input(); r[i]=vlen(p[i][1]-p[i][2]); } for(int i=1;i<=n;i++) { l[i].u=p[i][1]; l[i].v=p[i][1]+get_faline(p[i][1],p[i][2],p[i][3]); } double Min=INF; int flag=0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { double tmp=xian_xian(l[i],l[j]); tmp-=(r[i]+r[j]); if(tmp<=0) { flag=1; i=j=300; break; } if(tmp<Min) Min=tmp; } } if(flag) printf("Lucky\n"); else printf("%.2f\n",Min); } return 0;}
- HDU 4617 Weapon (三维计算几何)
- Hdu 4617 Weapon (三维计算几何 异面直线距离)
- HDU 4617 Weapon(计算几何、三维直线距离)
- HDU 4617 Weapon(立体计算几何)
- hdu 4617 Weapon (几何)
- HDU 4617 Weapon (计算几何:异面直线距离)
- hdu 4617 Weapon(几何)
- hdu 4617 Weapon【异面直线距离——基础三维几何】
- hdu 4617 2013多校联合训练第二场weapon简单的计算几何
- ZOJ 3157 Weapon --计算几何+树状数组
- hdu 4617 Weapon 计算异面直线间距离
- hdu 4617 : Weapon
- hdu 4617 Weapon
- HDU 4617 Weapon
- HDU.4617 Weapon
- 计算几何三维模板
- 三维计算几何模板
- 三维计算几何模版
- spring2.0和spring2.5及以上版本的jar包区别 spring jar 包详解
- Codeforces Round #193 (Div. 2) / 332A Down the Hatch! (模拟)
- 【设计模式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)
- DeDecms 友情链接
- Oracle分布式系统数据复制技术——概念篇
- HDU 4617 Weapon (三维计算几何)
- 开发R程序包之忍者篇[http://cos.name/2011/05/write-r-packages-like-a-ninja/]
- 3Sum Closest
- How do human sketch objects?
- 好看的动漫 壁纸
- 一台服务器配置多WebSite
- delphi读取excel的两种方法
- C语言用结构体实现位段
- hibernate执行sql