平面上有两个圆相交,求两个圆相交部分的面积

又学习了一遍算法,感触颇深,也对算法有了更进一步的认识,记录一下这次的学习,希望能帮到有需要的人。
输入:六个参数:第一个圆的圆心坐标,半径,第二个圆的圆心坐标,半径。
输出:返回相交部分的面积,若不相交,则返回0,并提示两圆无相交。
分析:平面上有两个圆相交,求两个圆相交部分的面积,如下图所示。

首先,需要判断两个圆是否相交,若不相交,则返回0,若相交,则要求出相交部分的面积,可以用两个扇形的面积减去四边形的面积,其中,两个扇形分别为两个圆心与两个圆相交点所组成的扇形,四边形则是两个圆心与相交点所构成的四边形。需要注意的是,这里的四边形不一定为凸四边形,所以这里的四边形面积可以利用海伦公式来进行计算,其次,这里扇形的圆心角不一定为锐角,所以,在计算扇形面积的时候,可以利用余弦定理来进行计算。
其中,海伦公式为:
,其中
,,a、b、c分别为平面内三角形三边边长。余弦定理为:
,其中各个字母表示如下图所示:

程序流程图如下:

public class IntersectionCircles {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);double x1 = scanner.nextDouble();double y1 = scanner.nextDouble();double r1 = scanner.nextDouble();double x2 = scanner.nextDouble();double y2 = scanner.nextDouble();double r2 = scanner.nextDouble();double s = instersection(x1,y1,r1,x2,y2,r2);if(s==0){System.out.println("两个圆不相交!");}else{System.out.println("两个圆相交的面积等于:"+s);}scanner.close();}private static double instersection(double x1,double y1,double r1,double x2,double y2,double r2){double p,s;double ans;//表示相交的面积//表示两圆心之间的距离double len = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); if(len >= r1+r2){//表示两圆不相交ans = 0;}else if(len <= Math.abs(r1-r2)){//包含了if(r1 < r2){ans = Math.PI*r1*r1;}else{ans = Math.PI*r2*r2;}}else{p = (len+r1+r2)/2;s = 2*Math.sqrt(p*(p-len)*(p-r1)*(p-r2));//海伦公式求四边形面积//余弦定理求扇形面积
ans=Math.acos((r1*r1+len*len-r2*r2)/(2*r1*len))*r1*r1+Math.acos((r2*r2+len*len-r1*r1)/(2*r2*len))*r2*r2-s;}return ans;}
}

平面上有两个圆相交,求两个圆相交部分的面积相关推荐

  1. 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。

    需求:给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 分析思路: 1.将所有点二维坐标化,即定义出所有点的x,y坐标值 2.遍历出所有取出两点的情况(不考虑先后顺序),根据任意 ...

  2. LeetCode149. 直线上最多的点数: 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。

    给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o ±------- ...

  3. 编写两个函数分别求两个数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个数由键盘输入。 输入输出格式示例: 输入:24 16 输出:zdgys=8,zxgbs=48

    编写两个函数分别求两个数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个数由键盘输入. 输入输出格式示例: 输入:24 16 输出:zdgys=8,zxgbs=48 #include ...

  4. java 求两线交点_JAVA求两直线交点和三角形内外心的编程代码

    JAVA求两直线交点和三角形内外心的编程代码 一.求两直线交点 复制代码 代码如下: class Point { double x; double y; public Point() { this.x ...

  5. c语言求出两个最大素数,求两个正整数的最大公约数      思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...

    求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) ( ...

  6. python求两数最大公因数_Python求两个数的最大公约数

    Python求两个数的最大公约数 一.求最大公约数算法: 1. 整数A对整数B进行取整, 余数用整数C来表示 举例: C = A % B 2. 如果C等于0,则C就是整数A和整数B的最大公约数 3. ...

  7. 写两个函数 分别求两个整数的最大公约数和最小公倍数 用主函数调用这两个函数 并输出结果 两个整数由键盘输入

    写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果.两个整数由键盘输入. 思路:先写一个主函数,通过主函数调用子函数来分别求出最大公倍数和最小公约数. 代码如下: ...

  8. 已知两个经纬度点,求两个点的角度.

    目前项目上有一个需求.需要从两个点和到线路的走向. 这个主要应用在地图和GIS方面 在网上搜索 了一大把也没有正确的. 结果图2 代码如下: public double GetAngle(MapPoi ...

  9. 输入两个数字,求两数字之间所有的质数,输出这些质数,并求这些质数和,最大值最小值

    num1=int(input('请输入第一个数:')) num2=int(input('请输入第二个数:')) c=[] for a in range(num1,num2):i=2while i< ...

  10. js求两圆交点_如何求两个圆的交点坐标,请举例

    展开全部 将两个圆62616964757a686964616fe4b893e5b19e31333431363563的方程相减,就消掉了x²,y²项,剩下一个关于x, y的一次方程,可解得y=kx+b. ...

最新文章

  1. linux tcpdump monitor模式 抓不到包 解决办法
  2. 【交换机】交换机如何配置光电复用接口
  3. matlab安装_走进数模(三)MATLAB安装
  4. C++ Primer 5th笔记(10)chapter10 泛型算法 :谓词
  5. 图像分割综述:FCN、U-Net、PSPNet、DeepLab
  6. Python——基于PIL和CV2实现自动拼图解决方案
  7. 用nagios监控ORACLE服务器
  8. vue如何引入ant部分组件
  9. Linux学习笔记:rpm程序包管理
  10. recect build 打包发布后访问出现404错误的简易解决方法
  11. 华为支持nfc功能的手机有哪些_四款带NFC功能的千元机,三星华为低至1399元!...
  12. PDE11 wave equation: d'Alembert examples
  13. android p ify 三星,Enjarify - Android逆向(二)
  14. ORACLE的SQL练习---7. 拼接字符串
  15. [HTML/CSS]Flex 布局中space-evenly 的兼容性
  16. A Game of Thrones(21)
  17. 联想拯救者y空间_锐龙H真给劲儿 联想拯救者R7000 2020首测
  18. OpenSSL生成CA自签名根证书和颁发证书和证书提取
  19. 排序-JAVA实现【四】堆排序
  20. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...

热门文章

  1. ES6对象(1):新增语法与API
  2. CSS3之border
  3. 一张图get jQuery所有方法
  4. 测试点解析:1049 数列的片段和_12行代码AC
  5. Python程序开发——第一章 基本python语法
  6. 25个优秀的Ajax技术和实例
  7. MiniGUI开发环境搭建全记录(嵌入式计X86)
  8. JAVA 串口编程(二)
  9. 使用JFreeChart在网页上绘制平滑曲线
  10. exception in thread main java,【异常】idea执行Main方法出现 Exception in thread main java.lang.NoClassDefFo...