hdu 4617 Weapon【异面直线距离——基础三维几何】
链接:
Weapon
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 224 Accepted Submission(s): 178
all circles can rotate easily. But for some unknown reasons they can not rotate any more. If these weapon can also make an explosion, then Doctor D. is lucky that he can also test the power of the weapon. If not, he would try to make an explosion by other
means. One way is to find a medium to connect two cylinder. But he need to know the minimum length of medium he will prepare. When the medium connect the surface of the two cylinder, it may make an explosion.
weapon. The first line represents the coordinates of center of the circle, and the second line and the third line represent two points in the circle which surrounds the center. It is supposed that these three points are not in one straight line. All float
numbers are between -1000000 to 1000000.
of two cylinders.
3
3
0 0 0
1 0 0
0 0 1
5 2 2
5 3 2
5 2 3
10 22 -2
11 22 -1
11 22 -3
3
0 0 0
1 0 1.5
1 0 -1.5
112 115 109
114 112 110
109 114 111
-110 -121 -130
-115 -129 -140
-104 -114 -119.801961
3
0 0 0
1 0 1.5
1 0 -1.5
112 115 109
114 112 110
109 114 111
-110 -121 -130
-120 -137 -150
-98 -107 -109.603922
Lucky
2.32
Lucky
其实是盗版的KB大神的了。。。虽然他已经告诉了我是求异面直线的距离ORz kuangbin
题意:
算法:
思路:
code:
Accepted | 4617 | 15MS | 244K | 3486 B | C++ | free斩 |
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std; const int maxn = 30+10; const double eps = 1e-10;
int dcmp(double x) //精度
{
if(fabs(x) < eps) return 0;
else return x < 0 ? -1 : 1;
} struct Point3D{
double x;
double y;
double z; Point3D() {}
Point3D(double _x, double _y, double _z){
x = _x;
y = _y;
z = _z;
} Point3D operator -(const Point3D &b) const
{
return Point3D(x-b.x, y-b.y, z-b.z);
}
double operator *(const Point3D &b) const //点积
{
return x*b.x+y*b.y+z*b.z;
}
Point3D operator ^(const Point3D &b) const //叉积
{
return Point3D(y*b.z-z*b.y, z*b.x-x*b.z, x*b.y-y*b.x);
} void input()
{
scanf("%lf%lf%lf", &x,&y,&z);
}
};
typedef Point3D Vector3D; struct Circle{
Point3D o, p1, p2; void input()
{
o.input();
p1.input();
p2.input();
}
}circle[maxn]; double Length3D(Point3D p) //向量长度
{
return sqrt(p*p);
} //两异面直线距离【两直线上的点的连线在其法向量上的投影】
double cal(Point3D p1, Vector3D k1, Point3D p2, Vector3D k2)
{
Point3D nV = k1^k2; //normalVector
return fabs(nV*(p1-p2)) / Length3D(nV);
} int main()
{
int T;
int n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
circle[i].input();
bool flag = false;
double Min = 3000000; for(int i = 0; i < n && !flag; i++)
{
for(int j = i+1; j < n && !flag; j++)
{
Circle c1 = circle[i];
Circle c2 = circle[j]; double r1 = Length3D(c1.p1-c1.o); //圆半径
double r2 = Length3D(c2.p1-c2.o);
Vector3D k1 = (c1.p1-c1.o)^(c1.p2-c1.o); //轴线的方向
Vector3D k2 = (c2.p1-c2.o)^(c2.p2-c2.o); double d = cal(c1.o, k1, c2.o, k2); //两异面直线距离
if(d <= r1+r2) //两圆相交或相切甚至内含应该都可以【题目不严谨没有相切和内含的数据】
{
flag = true;
break;
}
Min = min(Min, d-r1-r2);
}
}
if(flag) printf("Lucky\n");
else if(dcmp(Min) <= 0) printf("Lucky\n");
else printf("%.2lf\n", Min);
}
return 0;
}
hdu 4617 Weapon【异面直线距离——基础三维几何】的更多相关文章
- HDU 4617 Weapon (简单三维计算几何,异面直线距离)
Weapon Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- hdu 4617 Weapon
http://acm.hdu.edu.cn/showproblem.php?pid=4617 三维几何简单题 多谢高尚博学长留下的模板 代码: #include <iostream> #i ...
- HDU 4617 Weapon(三维几何)
Problem Description Doctor D. are researching for a horrific weapon. The muzzle of the weapon is a c ...
- HDU 4617 Weapon 三维计算几何
题意:给你一些无限长的圆柱,知道圆柱轴心直线(根据他给的三个点确定的平面求法向量即可)与半径,判断是否有圆柱相交.如果没有,输出柱面最小距离. 一共只有30个圆柱,直接暴力一下就行. 判相交/相切:空 ...
- hdu 4617 Weapon(叉积)
大一学弟表示刚学过高数,轻松无压力. 我等学长情何以堪= = 求空间无限延伸的两个圆柱体是否相交,其实就是叉积搞一搞 详细点就是求两圆心的向量在两直线(圆心所在的直线)叉积上的投影 代码略挫,看他的吧 ...
- hdu 5839(三维几何)
Special Tetrahedron Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- HDU 4741 Save Labman No.004 ( 三维计算几何 空间异面直线距离 )
空间异面直线的距离直接套模板. 求交点:求出两条直线的公共法向量,其中一条直线与法向量构成的平面 与 另一条直线 的交点即可.还是套模板o(╯□╰)o 1.不会有两条线平行的情况. 2.两条直线可能相 ...
- hdu 1174:爆头(计算几何,三维叉积求点到线的距离)
爆头 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- HDU 5533Dancing Stars on Me 基础几何
Problem Description The sky was brushed clean by the wind and the stars were cold in a black sky. Wh ...
随机推荐
- react-native-storage + AsyncStorage 实现数据存储
1.组件封装 import Storage from 'react-native-storage'; import { AsyncStorage } from 'react-native'; cons ...
- The fundamental differences between "GET" and "POST"
The HTML specifications technically define the difference between "GET" and "POST&quo ...
- NSight统计数据的颜色,缩写意义是什么?来自NV Jeff Kiel 比较官方的解释!
结合这个图示来看:https://dl.dropboxusercontent.com/u/32077444/nsight.pdf 1) The bars you see in the Summary ...
- 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)
[JAVA秒会技术之秒杀面试官]秒杀Java面试官——集合篇(一) [JAVA秒会技术之秒杀面试官]JavaEE常见面试题(三) http://blog.csdn.net/qq296398300/ar ...
- javascript获取日期的年,月,日
var date = new Date(strTime); return date.getFullYear()+"-"+(date.getMonth()+1)+"-&qu ...
- Spring 集成hibernate时配置连接释放模式
http://zmfkplj.iteye.com/blog/220822 程序出现一个奇怪的现象,用Quartz作业调度启动任务,运行一段时间后,任务会卡在一个查询接口处,久久不能运行完毕. 我本能的 ...
- JSON.parse 函数
JSON.parse 函数 JavaScript JSON.parse 函数 (JavaScript) 将 JavaScript 对象表示法 (JSON) 字符串转换为对象. JSON.parse(t ...
- rtp协议详解/rtcp协议详解
转自:http://www.cnblogs.com/li0803/archive/2010/11/20/1882792.html 1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应 ...
- fpga技能树
- [转]实用教程:搭建FTP服务器以实现局域网飞速传输文件
原文地址:https://www.ithome.com/html/win10/304059.htm 相信很多人都面临过这样的问题:一个局域网下有很多设备,我们想在这些设备之间互传文件,有些文件非常大, ...