hdu 4617 2013多校联合训练第二场weapon简单的计算几何

2024-06-07 07:32

本文主要是介绍hdu 4617 2013多校联合训练第二场weapon简单的计算几何,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多校训练的题都比较难,但这题还是比较水的,就是判断空间任意2个中无限长的圆柱体是否相交或相切

细节说明可以看代码的注释

#include<cstdio>
#include<algorithm>
#include<cmath>
#define INF 1e9
#define eps 1e-8
using namespace std;
struct Point {double x,y,z;};
typedef Point Vec;
struct Yuanzhu{double r;Vec N;Point center;}team[50];
double inline Veclen(Vec u)//计算模长
{return  sqrt(u.x*u.x+u.y*u.y+u.z*u.z);
}
Point inline Jian(Point a,Point b)//2个点相减
{return (Point){a.x-b.x,a.y-b.y,a.z-b.z};
}
double inline DianJi(Vec a,Vec b)//点积
{return a.x*b.x+a.y*b.y+a.z*b.z;
}
Vec inline ChaJi(Vec a,Vec b)//叉积
{return (Vec){a.y*b.z-b.y*a.z,b.x*a.z-a.x*b.z,a.x*b.y-b.x*a.y};
}
bool inline Zero(double a)//浮点判零
{return a<eps&&a>-eps;
}
double dis(Yuanzhu a,Yuanzhu b)//算2个圆柱间的距离
{Vec AB=Jian(a.center,b.center);//圆心连接的构成的向量Vec N=ChaJi(a.N,b.N);if(Zero(N.x)&&Zero(N.y)&&Zero(N.z)) N=a.N;//如果2个圆柱平行double ans;ans=DianJi(AB,N)/Veclen(N);//计算2个圆柱的过圆心的直线的最小距离,注意可能为负值if(ans<0) ans=-ans;//为负值就取其绝对值return ans-a.r-b.r;//减去2个圆柱的半径,就得到了2个圆柱的最小距离,为负值的时候说明2个圆柱相交,0的时候相切
}
void inline scan(Point &a) { scanf("%lf%lf%lf",&a.x,&a.y,&a.z); }//读入一个点的函数
int n;
void read()
{scanf("%d",&n);for(int i=0;i<n;i++){Point a,b;scan(team[i].center);scan(a);scan(b);team[i].r=Veclen(Jian(team[i].center,a));team[i].N=ChaJi(Jian(a,b),Jian(team[i].center,a));}
}
void deal()
{double ans=INF;for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)//枚举2个圆柱的距离{double temp=dis(team[i],team[j]);if(temp<eps)//判断是否相交{printf("Lucky\n");return ;}ans=min(ans,temp);}printf("%.2lf\n",ans);
}
int main()
{int T;scanf("%d",&T);while(T--){read();deal();}return 0;
}


 

这篇关于hdu 4617 2013多校联合训练第二场weapon简单的计算几何的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038536

相关文章

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满