【计算几何】CDOJ1720 几何几何
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- using namespace std;
- #define EPS 0.00000001
- struct Point{
- double x,y;
- }a[2],b[2];
- typedef Point Vector;
- Vector operator * (const double &a,const Vector &v){
- return (Vector){a*v.x,a*v.y};
- }
- Vector operator - (const Point &a,const Point &b){
- return (Vector){a.x-b.x,a.y-b.y};
- }
- Vector operator + (const Vector &a,const Vector &b){
- return (Vector){a.x+b.x,a.y+b.y};
- }
- double Cross(const Vector &a,const Vector &b){
- return a.x*b.y-a.y*b.x;
- }
- Point GetIntersection(Point P,Vector v,Point Q,Vector w){
- return P+(Cross(w,P-Q)/Cross(v,w))*v;
- }
- bool inLine(Point p,Point a,Point b){
- if(a.x>b.x){
- swap(a,b);
- }
- if(p.x-a.x>-EPS && b.x-p.x>-EPS){
- return 1;
- }
- return 0;
- }
- int main(){
- while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a[0].x,&a[0].y,&a[1].x,&a[1].y,&b[0].x,&b[0].y,&b[1].x,&b[1].y)!=EOF){
- if(fabs(a[0].y-a[1].y)<EPS || fabs(b[0].y-b[1].y)<EPS){
- puts("0.00");
- continue;
- }
- if(fabs(Cross(a[0]-a[1],b[0]-b[1]))<EPS){
- puts("0.00");
- continue;
- }
- if(a[0].y<a[1].y){
- swap(a[0],a[1]);
- }
- if(b[0].y<b[1].y){
- swap(b[0],b[1]);
- }
- Point p=GetIntersection(a[0],a[1]-a[0],b[0],b[1]-b[0]);
- if((!inLine(p,a[0],a[1])) || (!inLine(p,b[0],b[1]))){
- puts("0.00");
- continue;
- }
- if(a[0].y<b[0].y){
- swap(a[0],b[0]);
- swap(a[1],b[1]);
- }
- if(fabs(a[0].y-b[0].y)<EPS){
- printf("%.2f\n",fabs(a[0].x-b[0].x)*0.5*fabs(p.y-a[0].y));
- continue;
- }
- if((!fabs(a[0].x-a[1].x)<EPS) && (!fabs(b[0].x-b[1].x)<EPS)){
- double ka=(a[0].y-a[1].y)/(a[0].x-a[1].x);
- double kb=(b[0].y-b[1].y)/(b[0].x-b[1].x);
- if((ka>EPS && kb>EPS) || (ka<EPS && kb<EPS)){
- if(fabs(ka)-fabs(kb)>EPS){
- if((a[0].x-b[0].x<EPS && p.x-b[0].x>-EPS) || (a[0].x-b[0].x>-EPS && p.x-b[0].x<EPS)){
- puts("0.00");
- continue;
- }
- }
- }
- }
- double rr=(b[0].y-p.y)/(a[0].y-p.y);
- Point bc=p+rr*(a[0]-p);
- printf("%.2f\n",0.5*(b[0].y-p.y)*fabs(bc.x-b[0].x));
- }
- return 0;
- }
【计算几何】CDOJ1720 几何几何的更多相关文章
- Geometry 判断几何是否被另一个几何/线段分割成多段
如下图,如何判断几何多边形A被多边形B,切割为多段几何? 几何A被几何B切割 1. 获取几何A与几何B的交集C var intersectGeometry = new CombinedGeometry ...
- [知识点]计算几何I——基础知识与多边形面积
// 此博文为迁移而来,写于2015年4月9日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxaq.html 1.前言 ...
- UVA12304 2D Geometry 110 in 1! 计算几何
计算几何: 堆几何模版就能够了. . .. Description Problem E 2D Geometry 110 in 1! This is a collection of 110 (in bi ...
- 计算几何 val.2
目录 计算几何 val.2 几何单位结构体板子 旋转卡壳 基础概念 求法 模板 半平面交 前置芝士:线段交 S&I算法 模板 最小圆覆盖 随机增量法 时间复杂度 模板 后记 计算几何 val. ...
- LA 3263 好看的一笔画 欧拉几何+计算几何模板
题意:训练指南260 #include <cstdio> #include <cstring> #include <algorithm> #include < ...
- NOIP2002矩形覆盖[几何DFS]
题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...
- Direct2D 几何计算和几何变幻
D2D不仅可以绘制,还可以对多个几何图形对象进行空间运算.这功能应该在GIS界比较吃香. 这些计算包括: 合并几何对象,可以设置求交还是求并,CombineWithGeometry 边界,加宽边界,查 ...
- You can Solve a Geometry Problem too (hdu1086)几何,判断两线段相交
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...
- Direct2D教程III——几何(Geometry)对象
目前博客园中成系列的Direct2D的教程有 1.万一的 Direct2D 系列,用的是Delphi 2009 2.zdd的 Direct2D 系列,用的是VS中的C++ 3.本文所在的 Direct ...
随机推荐
- MSSQL 视图/事务(TRAN[SACTION])/存储过程(PROC[EDURE])/触发器(TRIGGER )
--视图 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上 视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同: 数据表是实际存储记录的地方, ...
- hdu 1016 Prime Ring Problem (素数环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 题目大意:输入一个n,环从一开始到n,相邻两个数相加为素数. #include <iost ...
- Win7蓝屏代码0X0000007B可能是SATA mode问题
Win7蓝屏代码0X0000007B可能是硬盘模式的问题,我进入BIOS把SATA的mode从Enhanced改为Compatible(及IDE兼容模式)结果系统可以顺利启动没有问题. 从 ...
- hadoop环境搭建编译
安装: JDK1.7+ maven 3.0 or later findbugs 1.3.9 protocolBuffer 2.5.0 cmake 2.6 zlib-devel openssl-deve ...
- python的IDLE界面回退代码语句
Alt+P回退到IDLE中之前输入的代码语句 Alt+N可以移至下一个代码语句
- c#中char、string转换为十六进制byte的浅析
问题引出: string转换为byte(十六进制) static void Main(string[] args) { "; byte[] b = Encoding.Default.GetB ...
- win10出现"win10系统即将过期,请激活"的处理办法
当打开电脑时,出现"你的win10系统即将过期,请前往激活”的提示.上网查了解决方案,避免以后在出现这样的情况,现将解决步骤整理如下: 1.下载KMSpico激活软件,百度网盘下载链接如下: ...
- HDU 3669 Cross the Wall(斜率DP+预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3669 题目大意:有n(n<=50000)个矩形,每个矩形都有高和宽,你可以在墙上最多挖k个洞使得 ...
- tinyhttpd ------ C 语言实现最简单的 HTTP 服务器
工作流程: 1>服务器启动,在指定端口或随机选取端口绑定httpd服务. 2>收到一个http请求时(其实就是listen端口accept的时候),派生一个线程运行accept_reque ...
- %和format的区别
在python中字符串的格式化分为两种:%和format.那么我们在什么时候来使用它们呢?它们有什么区别呢? 举个例子:我们根据一个坐标来表示一个动作 #定义一个坐标 point = (250,250 ...