转载

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

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

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

[cpp] view plaincopy print?
  1. double d = sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
  2. if (d >= r1+r2)
  3. return 0;
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;

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

[cpp] view plaincopy print?
  1. if(r2 - r1 >= d)
  2. return pi*r1*r1;
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;
}

Intersection

Time Limit: 4000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)
Total Submission(s): 3443    Accepted Submission(s): 1302

Problem Description
Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The following figures are some famous examples you may know.


A ring is a 2-D figure bounded by two circles sharing the common center. The radius for these circles are denoted by r and R (r < R). For more details, refer to the gray part in the illustration below.


Matt just designed a new logo consisting of two rings with the same size in the 2-D plane. For his interests, Matt would like to know the area of the intersection of these two rings.

Input
The first line contains only one integer T (T ≤ 105), which indicates the number of test cases. For each test case, the first line contains two integers r, R (0 ≤ r < R ≤ 10).

Each of the following two lines contains two integers xi, yi (0 ≤ xi, yi ≤ 20) indicating the coordinates of the center of each ring.

Output
For each test case, output a single line “Case #x: y”, where x is the case number (starting from 1) and y is the area of intersection rounded to 6 decimal places.
Sample Input
2
2 3
0 0
0 0
2 3
0 0
5 0

Sample Output
Case #1: 15.707963
Case #2: 2.250778

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
double x1,ya,x2,y2,dis,s1,s2,s3,R,r;
double sov(double R,double r){if(dis>=r+R) return 0;if(dis<=R-r) return acos(-1.0)*r*r;double x=(R*R-r*r+dis*dis)/2.0/dis;double y=(r*r-R*R+dis*dis)/2.0/dis;double seta1=2*acos(x/R);double seta2=2*acos(y/r);double ans=seta1*R*R/2.0+seta2*r*r/2.0;double h=sqrt(R*R-x*x);return ans-dis*h;
}
int main(){int tas=1,T;for(scanf("%d",&T);T--;){scanf("%lf%lf",&r,&R);scanf("%lf%lf%lf%lf",&x1,&ya,&x2,&y2);dis=sqrt((x1-x2)*(x1-x2)+(ya-y2)*(ya-y2));s1=sov(R,R),s2=sov(R,r),s3=sov(r,r);printf("Case #%d: %.6f\n",tas++,s1-2*s2+s3);}
}

转载于:https://www.cnblogs.com/mfys/p/7622133.html

两圆相交求面积 hdu5120相关推荐

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

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

  2. 简单多边形与圆相交求面积

    简单多边形与圆相交求面积 简单多边形的有向面积 简单多边形与圆相交的有向面积 圆心三角形与圆相交求面积 简单多边形与圆相交的有向面积 简单多边形的有向面积 所谓简单多边形,就是指不相邻的边不相交,且每 ...

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

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

  4. 求两圆相交面积(模板)

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

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

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

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

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

  7. 【算法记录/计算几何】扇形与圆相交的面积(待解决)

    目录 问题描述 近似求法 一种分类方式 000 另一种分类方式 外切或相离 相交 包含或内切 问题描述 假设扇形区域如上图,求一个圆与该扇形相交部分的面积. (有木有大佬告诉我怎么求啊) 近似求法 细 ...

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

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

  9. C#画五角星、月牙形和它们相交求面积

    利用Winform作图,是非常便利的.最近在做一个几何阴影相交求解的程序.程序包含了五角星的画法,月牙的画法.以及它们相交阴影部分的面积求法.(重点判断点是否在五角星内) 效果图 画五角星 //画五角 ...

最新文章

  1. application.yml 动态替换_新途锐改顶配矩阵大灯,动态流水尾灯
  2. 90后「V神」封神之路:4岁学编程,19岁创办以太坊,4年十亿身家!
  3. 实现单机五子棋,难吗?
  4. 算法提高 学霸的迷宫
  5. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (3)
  6. Android 全局字体设置 例如楷体
  7. 【目录】《剑指Offer》Java实现
  8. Java保留小数点一位的方法
  9. Regsvr32.exe 的用法
  10. mysql InnoDB引擎支持hash索引吗
  11. phpcms v9二级栏目生成到根目录后三级栏目无法访问的解决办法
  12. 详细说明手工创建oracle数据库实例
  13. linux编译框架的搭建,Linux下单机版的beego框架的搭建
  14. 【扩频通信】基于matlab直接序列扩频系统仿真【含Matlab源码 1529期】
  15. Webpower中国区发布《2015年中国酒店旅游行业邮件营销市场报告》
  16. 对接饿了么 获取授权
  17. Linux7系统克隆到另一个硬盘,Ubuntu14.04 dd命令克隆系统镜像安装到另一台机器上...
  18. 16周。项目三,吃饭睡觉打豆豆
  19. left.php源代码分析
  20. OpenCV参考手册之Mat类详解(二)

热门文章

  1. 循环造数据_项目管理数据与信息--DIKW模型
  2. docker安装rocketmq你学会了吗
  3. centos6.8安装docker
  4. Java技术:SpringBoot集成FreeMarker生成word文件
  5. 8 大错误SQL用法,你肯定踩过坑!
  6. mysql字符集说明
  7. 常用 SQL Server 规范集锦
  8. 同态加法_同态的Spotify
  9. 现代人的压力和焦虑_设计师如何建立减少焦虑和压力的体验
  10. 重学JavaScript深入理解系列(六)