1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cmath>
  4. using namespace std;
  5. #define EPS 0.00000001
  6. struct Point{
  7. double x,y;
  8. }a[2],b[2];
  9. typedef Point Vector;
  10. Vector operator * (const double &a,const Vector &v){
  11. return (Vector){a*v.x,a*v.y};
  12. }
  13. Vector operator - (const Point &a,const Point &b){
  14. return (Vector){a.x-b.x,a.y-b.y};
  15. }
  16. Vector operator + (const Vector &a,const Vector &b){
  17. return (Vector){a.x+b.x,a.y+b.y};
  18. }
  19. double Cross(const Vector &a,const Vector &b){
  20. return a.x*b.y-a.y*b.x;
  21. }
  22. Point GetIntersection(Point P,Vector v,Point Q,Vector w){
  23. return P+(Cross(w,P-Q)/Cross(v,w))*v;
  24. }
  25. bool inLine(Point p,Point a,Point b){
  26. if(a.x>b.x){
  27. swap(a,b);
  28. }
  29. if(p.x-a.x>-EPS && b.x-p.x>-EPS){
  30. return 1;
  31. }
  32. return 0;
  33. }
  34. int main(){
  35. 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){
  36. if(fabs(a[0].y-a[1].y)<EPS || fabs(b[0].y-b[1].y)<EPS){
  37. puts("0.00");
  38. continue;
  39. }
  40. if(fabs(Cross(a[0]-a[1],b[0]-b[1]))<EPS){
  41. puts("0.00");
  42. continue;
  43. }
  44. if(a[0].y<a[1].y){
  45. swap(a[0],a[1]);
  46. }
  47. if(b[0].y<b[1].y){
  48. swap(b[0],b[1]);
  49. }
  50. Point p=GetIntersection(a[0],a[1]-a[0],b[0],b[1]-b[0]);
  51. if((!inLine(p,a[0],a[1])) || (!inLine(p,b[0],b[1]))){
  52. puts("0.00");
  53. continue;
  54. }
  55. if(a[0].y<b[0].y){
  56. swap(a[0],b[0]);
  57. swap(a[1],b[1]);
  58. }
  59. if(fabs(a[0].y-b[0].y)<EPS){
  60. printf("%.2f\n",fabs(a[0].x-b[0].x)*0.5*fabs(p.y-a[0].y));
  61. continue;
  62. }
  63. if((!fabs(a[0].x-a[1].x)<EPS) && (!fabs(b[0].x-b[1].x)<EPS)){
  64. double ka=(a[0].y-a[1].y)/(a[0].x-a[1].x);
  65. double kb=(b[0].y-b[1].y)/(b[0].x-b[1].x);
  66. if((ka>EPS && kb>EPS) || (ka<EPS && kb<EPS)){
  67. if(fabs(ka)-fabs(kb)>EPS){
  68. 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)){
  69. puts("0.00");
  70. continue;
  71. }
  72. }
  73. }
  74. }
  75. double rr=(b[0].y-p.y)/(a[0].y-p.y);
  76. Point bc=p+rr*(a[0]-p);
  77. printf("%.2f\n",0.5*(b[0].y-p.y)*fabs(bc.x-b[0].x));
  78. }
  79. return 0;
  80. }

【计算几何】CDOJ1720 几何几何的更多相关文章

  1. Geometry 判断几何是否被另一个几何/线段分割成多段

    如下图,如何判断几何多边形A被多边形B,切割为多段几何? 几何A被几何B切割 1. 获取几何A与几何B的交集C var intersectGeometry = new CombinedGeometry ...

  2. [知识点]计算几何I——基础知识与多边形面积

    // 此博文为迁移而来,写于2015年4月9日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxaq.html 1.前言 ...

  3. UVA12304 2D Geometry 110 in 1! 计算几何

    计算几何: 堆几何模版就能够了. . .. Description Problem E 2D Geometry 110 in 1! This is a collection of 110 (in bi ...

  4. 计算几何 val.2

    目录 计算几何 val.2 几何单位结构体板子 旋转卡壳 基础概念 求法 模板 半平面交 前置芝士:线段交 S&I算法 模板 最小圆覆盖 随机增量法 时间复杂度 模板 后记 计算几何 val. ...

  5. LA 3263 好看的一笔画 欧拉几何+计算几何模板

    题意:训练指南260 #include <cstdio> #include <cstring> #include <algorithm> #include < ...

  6. NOIP2002矩形覆盖[几何DFS]

    题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...

  7. Direct2D 几何计算和几何变幻

    D2D不仅可以绘制,还可以对多个几何图形对象进行空间运算.这功能应该在GIS界比较吃香. 这些计算包括: 合并几何对象,可以设置求交还是求并,CombineWithGeometry 边界,加宽边界,查 ...

  8. 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 ...

  9. Direct2D教程III——几何(Geometry)对象

    目前博客园中成系列的Direct2D的教程有 1.万一的 Direct2D 系列,用的是Delphi 2009 2.zdd的 Direct2D 系列,用的是VS中的C++ 3.本文所在的 Direct ...

随机推荐

  1. MSSQL 视图/事务(TRAN[SACTION])/存储过程(PROC[EDURE])/触发器(TRIGGER )

    --视图 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上 视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同: 数据表是实际存储记录的地方, ...

  2. hdu 1016 Prime Ring Problem (素数环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 题目大意:输入一个n,环从一开始到n,相邻两个数相加为素数. #include <iost ...

  3. Win7蓝屏代码0X0000007B可能是SATA mode问题

    Win7蓝屏代码0X0000007B可能是硬盘模式的问题,我进入BIOS把SATA的mode从Enhanced改为Compatible(及IDE兼容模式)结果系统可以顺利启动没有问题.       从 ...

  4. hadoop环境搭建编译

    安装: JDK1.7+ maven 3.0 or later findbugs 1.3.9 protocolBuffer 2.5.0 cmake 2.6 zlib-devel openssl-deve ...

  5. python的IDLE界面回退代码语句

    Alt+P回退到IDLE中之前输入的代码语句 Alt+N可以移至下一个代码语句

  6. c#中char、string转换为十六进制byte的浅析

    问题引出: string转换为byte(十六进制) static void Main(string[] args) { "; byte[] b = Encoding.Default.GetB ...

  7. win10出现"win10系统即将过期,请激活"的处理办法

    当打开电脑时,出现"你的win10系统即将过期,请前往激活”的提示.上网查了解决方案,避免以后在出现这样的情况,现将解决步骤整理如下: 1.下载KMSpico激活软件,百度网盘下载链接如下: ...

  8. HDU 3669 Cross the Wall(斜率DP+预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3669 题目大意:有n(n<=50000)个矩形,每个矩形都有高和宽,你可以在墙上最多挖k个洞使得 ...

  9. tinyhttpd ------ C 语言实现最简单的 HTTP 服务器

    工作流程: 1>服务器启动,在指定端口或随机选取端口绑定httpd服务. 2>收到一个http请求时(其实就是listen端口accept的时候),派生一个线程运行accept_reque ...

  10. %和format的区别

    在python中字符串的格式化分为两种:%和format.那么我们在什么时候来使用它们呢?它们有什么区别呢? 举个例子:我们根据一个坐标来表示一个动作 #定义一个坐标 point = (250,250 ...