/** 多边形的交,多边形的边一定是要按逆时针方向给出* 还要判断是凸包还是凹包,调用相应的函数* 面积并,只要和面积减去交即可*/
#include <bits/stdc++.h>
using namespace std;const int maxn = //300;
const double eps = 1e-8;
int dcmp(double x)
{if(x > eps) return 1;return x < -eps ? -1 : 0;
}
struct Point
{double x, y;
};
double cross(Point a,Point b,Point c) ///叉积
{return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
}
Point intersection(Point a,Point b,Point c,Point d)
{Point p = a;double t =((a.x-c.x)*(c.y-d.y)-(a.y-c.y)*(c.x-d.x))/((a.x-b.x)*(c.y-d.y)-(a.y-b.y)*(c.x-d.x));p.x +=(b.x-a.x)*t;p.y +=(b.y-a.y)*t;return p;
}
//计算多边形面积
double PolygonArea(Point p[], int n)
{if(n < 3) return 0.0;double s = p[0].y * (p[n - 1].x - p[1].x);p[n] = p[0];for(int i = 1; i < n; ++ i)s += p[i].y * (p[i - 1].x - p[i + 1].x);return fabs(s * 0.5);
}
double CPIA(Point a[], Point b[], int na, int nb)//ConvexPolygonIntersectArea
{Point p[20], tmp[20];int tn, sflag, eflag;a[na] = a[0], b[nb] = b[0];memcpy(p,b,sizeof(Point)*(nb + 1));for(int i = 0; i < na && nb > 2; i++){sflag = dcmp(cross(a[i + 1], p[0],a[i]));for(int j = tn = 0; j < nb; j++, sflag = eflag){if(sflag>=0) tmp[tn++] = p[j];eflag = dcmp(cross(a[i + 1], p[j + 1],a[i]));if((sflag ^ eflag) == -2)tmp[tn++] = intersection(a[i], a[i + 1], p[j], p[j + 1]); ///求交点}memcpy(p, tmp, sizeof(Point) * tn);nb = tn, p[nb] = p[0];}if(nb < 3) return 0.0;return PolygonArea(p, nb);
}
double SPIA(Point a[], Point b[], int na, int nb)///SimplePolygonIntersectArea 调用此函数
{int i, j;Point t1[4], t2[4];double res = 0, num1, num2;a[na] = t1[0] = a[0], b[nb] = t2[0] = b[0];for(i = 2; i < na; i++){t1[1] = a[i-1], t1[2] = a[i];num1 = dcmp(cross(t1[1], t1[2],t1[0]));if(num1 < 0) swap(t1[1], t1[2]);for(j = 2; j < nb; j++){t2[1] = b[j - 1], t2[2] = b[j];num2 = dcmp(cross(t2[1], t2[2],t2[0]));if(num2 < 0) swap(t2[1], t2[2]);res += CPIA(t1, t2, 3, 3) * num1 * num2;}}return res;
}
Point p1[maxn], p2[maxn];
int n1, n2;
int main()
{while(cin>>n1>>n2){for(int i = 0; i < n1; i++) scanf("%lf%lf", &p1[i].x, &p1[i].y);for(int i = 0; i < n2; i++) scanf("%lf%lf", &p2[i].x, &p2[i].y);double Area = SPIA(p1, p2, n1, n2);}return 0;
}

计算几何 多边形的交与并相关推荐

  1. 【算法:数学】计算几何-多边形的重心

    转载:计算几何-多边形的重心 1. 1 累加和求重心 设平面上有N 个离散数据点( xi , yi ) ( i = 1, 2, ., n) , 其 多边形重心G( . x1, . y1) 为: 这是求 ...

  2. 计算几何——多边形和圆相交的面积

    汇总篇:计算几何汇总 原文地址:https://www.cnblogs.com/lxglbk/archive/2012/08/12/2634192.html 代码部分为个人原创 圆与多变形相交的面积 ...

  3. UVA1396 Most Distant Point from the Sea(AM - ICPC - Tokyo - 2007)(计算几何,半平面交 + 二分答案)

    整理的算法模板合集: ACM模板 题目传送门 见<训练指南>P279 很明显就是一个二分答案,它问的是最远的点,直接枚举因为这里都是double类型的数所以有无限个点,我们可以直接二分. ...

  4. POJ 3855 计算几何·多边形重心

    思路: 多边形面积->任选一个点,把多边形拆成三角,叉积一下 三角形重心->(x1+x2+x3)/3,(y1+y2+y3)/3 多边形重心公式题目中有,套一下就好了 计算多边形重心方法: ...

  5. LISP多边形形心计算公式_计算几何-多边形重心公式

    这是求多边形最简单直观的方法.可以直接利用离散数据点的 x, y 坐标就能求图形重心. 但是缺陷在于没有对离散数据点所围图形做任何处理和分析 , 精度不够. 1. 2 算法一:在讲该算法时,先要明白下 ...

  6. POJ3675 Telescope 圆和多边形的交

    POJ3675 用三角剖分可以轻松搞定,数据也小 随便AC. #include<iostream> #include<stdio.h> #include<stdlib.h ...

  7. 算法学习笔记之计算几何--三角形,多边形与圆

    Introduction 相比前两节这一节的内容较少设计到算法知识,不过多边形与圆是集合中十分基础的研究对象,ACM竞赛中也经常涉及,所以在这里将常见的相关知识总结一下. 三角形 三角形的面积 直接使 ...

  8. Gym - 101158J -Cover the Polygon with Your Disk(模拟退火+多边形与圆面积的交)

    (一)题面: A convex polygon is drawn on a flat paper sheet. You are trying to place a disk in your hands ...

  9. OpenGL研究3.0 多边形区域填充

    OpenGL研究3.0 多边形区域填充 DionysosLai(906391500@qq.com)2014-06-22 所谓多边形区域填充.就是将多边形内部区域,所有已相同色块填充.注意:这里讨论的多 ...

最新文章

  1. Linux中mmap与munmap函数系统调用
  2. 人力资源部如何运用OKR?看三大层面最新OKR模板
  3. R语言构建xgboost模型:模型的保存(xgb.save)和加载(xgb.load)、或者保存为R二进制文件(xgb.save.raw R binary vector)
  4. spring boot部署war包打包插件配置
  5. 【20181102T2】飞越行星带【智商题+最小瓶颈路】
  6. php与其它语言组合开发,PHP相对于其它语言有哪些魅力?
  7. Vm下安装centos7.0时电脑进入黑屏的解决方法(选择Install Centos 7或者是Test this media install Centos 7以后,虚拟机屏幕立马就进入黑屏状态)
  8. 【Hadoop】Hadoop组件 -之 HDFS组件
  9. python qq机器人 发送文件_10.【代码】QQ群发机器人 - Python网络爬虫实战
  10. 正则去除html标签和空字符,正则表达式清除空格和html标签中的 空格
  11. win10小娜搜索框搜索无反应
  12. CSS控制多行文本省略--显示省略号
  13. MSDC 4.3 接口规范(4)
  14. storm mysql trident_Storm Trident状态
  15. 精力管理3—体能精力
  16. Redis 地理坐标(GEO)方法使用详解
  17. asm.js 和 WebAssembly 有什么区别?
  18. PCL点云生成深度图像
  19. HTML超链接 表格 列表 表单
  20. TFC 2017 腾讯Web前端大会 全场笔记

热门文章

  1. suse linux 桌面效果,SUSE Linux办公应用炫酷表现
  2. eclipse 安装birt插件
  3. 数商云:B2B+供应链,领跑钢铁电商模式新玩法
  4. 闻康集团郑早明:医药电商4.0模式重构互联网+医药
  5. SharePoint 2010 名言警句 Web部件
  6. 三星VR新专利曝光,支持悬空手势识别 1
  7. 软件被人后台篡改了收款码属于入侵吗?
  8. ZBrush 2021中文版
  9. 【书评】《你好哇,程序员——漫话程序员面试求职、升职加薪、创业与生活》...
  10. resize2fs: Bad magic number in super-block while trying to open /dev/mapper/centos-root