两圆相交分如下集中情况:相离、相切、相交、包含。

设两圆圆心分别是O1和O2,半径分别是r1和r2,设d为两圆心距离。又因为两圆有大有小,我们设较小的圆是O1。

相离相切的面积为零,代码如下:

double d = sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
if (d >= r1+r2)
return 0;

包含的面积就是小圆的面积了,代码如下:

if(r2 - r1 >= d)
return pi*r1*r1;

接下来看看相交的情况。

相交面积可以这样算:扇形O1AB - △O1AB + 扇形O2AB - △O2AB,这两个三角形组成了一个四边形,可以用两倍的△O1AO2求得,

所以答案就是两个扇形-两倍的△O1AO2

因为

所以

那么

同理

接下来是四边形面积:


代码如下:

double ang1=acos((r1*r1+d*d-r2*r2)/(2*r1*d));
double ang2=acos((r2*r2+d*d-r1*r1)/(2*r2*d));
return ang1*r1*r1 + ang2*r2*r2 - r1*d*sin(ang1);

至此完整代码就可以写出来了:

#include<iostream>
#include<cmath>
using namespace std;#define pi acos(-1.0)typedef struct node
{int x;int y;
}point;double AREA(point a, double r1, point b, double r2)
{double d = sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));if (d >= r1+r2)return 0;if (r1>r2){double tmp = r1;r1 = r2;r2 = tmp;}if(r2 - r1 >= d)return pi*r1*r1;double ang1=acos((r1*r1+d*d-r2*r2)/(2*r1*d));double ang2=acos((r2*r2+d*d-r1*r1)/(2*r2*d));return ang1*r1*r1 + ang2*r2*r2 - r1*d*sin(ang1);
}int main()
{point a, b;a.x=2, a.y=2;b.x=7, b.y=2;double result = AREA(a, 3, b, 5);printf("%lf\n", result);return 0;
}

求两圆相交面积(模板)相关推荐

  1. Square Card 计算几何-两圆相交面积

    题意 : 给两个圆,分别代表得分区域和奖励区域,边长为a的正方形以均等概率扔到平面后绕中心旋转,保证一定会有某时刻正方形完全在得分区域内. 如果某时刻正方形完全落在区域内,获得相应分数,求正方形 既获 ...

  2. 求两圆相交的交点的方法

    最近研究三角定位算法,研究了下怎样求两圆的交点,现给出求解方法:

  3. 求任意两圆相交的面积(不限程序设计语言版本)

    无所谓程序设计语言,不过是表达形式不一罢了 题目来源 理论知识 参考知识: 代码实现 C# 鼠标悬停此处预览测试样例 Java 鼠标悬停于此预览测试样例 Kotlin C++ C Python Jav ...

  4. 牛客网暑期ACM多校训练营(第三场) J Distance to Work 计算几何求圆与多边形相交面积模板...

    链接:https://www.nowcoder.com/acm/contest/141/J 来源:牛客网 Eddy has graduated from college. Currently, he ...

  5. 两圆相交求面积 hdu5120

    转载 两圆相交分如下集中情况:相离.相切.相交.包含. 设两圆圆心分别是O1和O2,半径分别是r1和r2,设d为两圆心距离.又因为两圆有大有小,我们设较小的圆是O1. 相离相切的面积为零,代码如下: ...

  6. python求交点坐标_Python - 两圆相交求交点坐标

    Python - 两圆相交求交点坐标 Max.Bai 2016-05-16 Python - 两圆相交求交点坐标 三轴机械臂求坐标问题,其实转化为平面问题就是两圆相交求交点问题,交点算出来就可以用反三 ...

  7. 趣题:求两圆柱相交部分的体积

    昨天去图书馆看趣味数学大师马丁加德纳的小册子<意料之外的绞刑>,看到了这个趣题:求两圆柱相交部分的体积(两圆柱半径都为1)(正交).要求是不用微积分,只用高中生就能看懂的简单数学.如果你难 ...

  8. python输入半径求圆的面积、保留三位小数_编写程序,输入圆的半径,求该圆的面积与周长(保留三位小数)。 /* 程序功能:输入圆的半径,计算圆的面积与周长*/_学小易找答案...

    [编程题]从字符串中删除指定的字符.同一字母的大小写按不同字符处理. 例如:若程序执行时,输入字符串为: turbo c and Borland c++ ,从键盘上输入字符: n ,则输出后变为: t ...

  9. 已知两圆圆心坐标及半径求两圆交点 (C语言|参数方程求解)

    已知两圆圆心坐标及半径求两圆交点 (C语言|参数方程求解) 在一个二维平面上给定两个圆的圆心横纵坐标.半径共6个参数, 求交点. 这个问题无非是解二元二次方程组.普通二元二次方程联立消元求解的困难在于 ...

最新文章

  1. SpringMVC - SpringMVC的概述
  2. matlab-xlsread无法打开文件找不到文件
  3. 大型网站架构学习笔记
  4. php发送https请求,php post 请求https接口
  5. 强行删除文件 windwos10_如何彻底删除 Windows 当中的顽固文件?
  6. 回忆---中秋夜赴京城考OCP有感
  7. 禁止snmpd往syslog中写入无用信息
  8. CentOS 7 CentOS7查看开放端口命令及开放端口号
  9. 产业链人士:在台积电营收中,第一大客户苹果贡献超过20%
  10. win7_64 安装 caffe
  11. R和Tableau平行坐标图
  12. C#之http transfer-Encoding模式
  13. [转]瀑布流布局浅析
  14. vbs无法拒绝的表白代码
  15. 一键删除PPT页面内的动画or页面的切换效果总结
  16. qq游戏ie服务器在哪个文件夹,IE的缓存文件夹在哪个文件夹?
  17. Html标签命名规范
  18. 格兰杰因果检验准备-平稳性检验-Eviews
  19. 蓝桥杯:三升排序——————Python
  20. 华为路由器联动_华为移动路由体验报告:你的随身WiFi伴侣

热门文章

  1. 【ubuntu】安装robo 3t
  2. git克隆代码库时使用指定的用户名密码
  3. 拦截器与过滤器详解,使用方式与注意事项,使用场景以及区别与联系
  4. pytorch——冻结某层参数
  5. 超市库存管理系统java_java实现超市库存管理系统
  6. ModelNet40点云数据集预处理
  7. 获取MAC地址的四种方法(转)
  8. UltraEdit v18.0 破解版注册机
  9. 赫兹是如何发现电磁波从而证明了麦克斯韦方程的?
  10. c语言过去硬盘序列号,[C]获取硬盘序列号