hdu 4741 Save Labman No.004(2013杭州网络赛)
来源:互联网 发布:淘宝客外部论坛 编辑:程序博客网 时间:2024/06/03 16:42
http://blog.sina.com.cn/s/blog_a401a1ea0101ij9z.html
空间两直线上最近点对。
这个博客上给出了很好的点法式公式了。。。其实没有那么多的tricky。。。不知到别人怎么错的。。。
//#pragma comment(linker, "/STACK:1024000000,1024000000")#include<algorithm>#include<iostream>#include<cstring>#include<fstream>#include<sstream>#include<vector>#include<string>#include<cstdio>#include<bitset>#include<queue>#include<stack>#include<cmath>#include<map>#include<set>#define FF(i, a, b) for(int i=a; i<b; i++)#define FD(i, a, b) for(int i=a; i>=b; i--)#define REP(i, n) for(int i=0; i<n; i++)#define CLR(a, b) memset(a, b, sizeof(a))#define debug puts("**debug**")#define LL long long#define PB push_back#define MP make_pair#define eps 1e-10using namespace std;struct Point{ double x, y, z; Point(double x=0, double y=0, double z=0) : x(x), y(y),z(z){}};typedef Point Vector;Vector operator + (Vector a, Vector b) { return Vector(a.x+b.x, a.y+b.y, a.z+b.z); };Vector operator - (Vector a, Vector b) { return Vector(a.x-b.x, a.y-b.y, a.z-b.z); };Vector operator * (Vector a, double p) { return Vector(a.x*p, a.y*p, a.z*p); }Vector operator / (Vector a, double p) { return Vector(a.x/p, a.y/p, a.z/p); }double Dot(Vector a, Vector b) { return a.x*b.x + a.y*b.y + a.z*b.z; }double Length(Vector a) { return sqrt(Dot(a, a)); }Vector Cross(Point a, Point b){ return Vector(a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x);}Point a1, b1, a2, b2;int main(){ int n; scanf("%d", &n); while(n--) { scanf("%lf%lf%lf", &a1.x, &a1.y, &a1.z); scanf("%lf%lf%lf", &b1.x, &b1.y, &b1.z); scanf("%lf%lf%lf", &a2.x, &a2.y, &a2.z); scanf("%lf%lf%lf", &b2.x, &b2.y, &b2.z); Vector v1 = (a1-b1), v2 = (a2-b2); Vector N = Cross(v1, v2); Vector ab = (a1-a2); double ans = Dot(N, ab) / Length(N); Point p1 = a1, p2 = a2; Vector d1 = b1-a1, d2 = b2-a2; Point ans1, ans2; double t1, t2; t1 = Dot((Cross(p2-p1, d2)), Cross(d1, d2)); t2 = Dot((Cross(p2-p1, d1)), Cross(d1, d2)); double dd = Length((Cross(d1, d2))); t1 /= dd*dd; t2 /= dd*dd; ans1 = (a1 + (b1-a1)*t1); ans2 = (a2 + (b2-a2)*t2); printf("%.6f\n", fabs(ans)); printf("%.6f %.6f %.6f ", ans1.x, ans1.y, ans1.z); printf("%.6f %.6f %.6f\n", ans2.x, ans2.y, ans2.z); } return 0;}
- hdu 4741 Save Labman No.004(2013杭州网络赛)
- hdu 4741 Save Labman No.004 [2013年杭州ACM网络赛]
- HDU 4741 Save Labman No.004 2013 ACM/ICPC 杭州网络赛
- hdu 4741 Save Labman No.004
- hdu 4741 Save Labman No.004
- hdu 4741 Save Labman No.004
- HDU 4741 Save Labman No.004
- HDU 4741 Save Labman No.004
- HDU 4741 Save Labman No.004
- 2013杭州网络预选赛 1004 Save Labman No.004 求异面直线之间距离
- hdu 4741 Save Labman No.004(计算几何)
- [HDU 4741]Save Labman No.004[计算几何][精度]
- hdu 4741——Save Labman No.004
- Save Labman No.004
- HDU 4741 Save Labman No.004 2013 ACM/ICPC Asia Regional Hangzhou Online
- hdu 4741 Save Labman No.004 (求异面直线距离及交点)
- POJ 4741 Save Labman No.004
- HDU4741 Save Labman No.004
- poj 2406 Power Strings(KMP变形)
- 2013 成都、杭州网络赛小结 byPlato
- U盘安装Ubuntu 12.04 Server版
- stack的应用(双栈法)
- 互联网系统架构的演进
- hdu 4741 Save Labman No.004(2013杭州网络赛)
- PHP利用imagick把PDF转成PNG
- simulate 802.11b channel within NS2 解析
- poj 3624 Charm Bracelet 01背包问题
- APP 提交到APPSTORE 过程
- Javascript在IE和FireFox中的不同表现
- android图片压缩处理,并保存
- 初学者学数据结构(一)
- hdu 4740 搜索