求任意两圆相交的面积(不限程序设计语言版本)
无所谓程序设计语言,不过是表达形式不一罢了
- 题目来源
- 理论知识
- 参考知识:
- 代码实现
- C#
- 鼠标悬停此处预览测试样例
- Java
- 鼠标悬停于此预览测试样例
- Kotlin
- C++
- C
- Python
- JavaScript
- Html
- objective-c
- shell
- perl
- ruby
- 汇编语言
- 拓展
- 改成两个圆环以后呢?
题目来源
鼠标悬停于此可预览题目
东华大学 .NET 技术课程中期作业。
帮别人忙,自己昨夜写的一个小程序。
理论知识
如上图所示:
四边形面积可由对称的两个三角形求和而得:
O1AO2B = O1AO2 + O1BO2 = 2 * O1AO2
以三角形 O1AO2 进行分析:
已知三边可以求:任意内角
∠AO1O2 = 余弦定理公式变形可求
该三角形面积 = 多种求法,介绍两种如下:
S = (1.0/2)* 两边乘积*夹角正弦值
或者海伦公式
p = (1.0/2)*(a+b+c)
s = sqrt(p*(p-a)*(p-b)*(p-c))
参考知识:
计算两圆相交面积
全网总结最全:17种求三角形面积的公式,从平面到立体
代码实现
C#
CircleArea.cs文件内容:
using System;namespace AreaCalculation
{public class CircleArea{private double r1;private double r2;private double d;public CircleArea(){this.r1 = .0;this.r2 = .0;this.d = .0;}public CircleArea(double r1 = .0, double r2 = .0, double d = .0){this.r1 = r1;this.r2 = r2;this.d = d;}public void Init(ref double r1, ref double r2, ref double d){this.r1 = r1;this.r2 = r2;this.d = d;}public double IntersecArea(){var area = .0;if (this.r1 + this.r2 <= d) //两圆外离(切){//return .0;area = .0;}else if (Math.Abs(this.r1 - this.r2) >= d) //两圆内含(切)(此处必须要有等号,要处理同心圆的特例情形){//return (this.r1 < this.r2) ? Math.PI * this.r1 * this.r1 : Math.PI * this.r2 * this.r2;area = (this.r1 < this.r2) ? Math.PI * this.r1 * this.r1 : Math.PI * this.r2 * this.r2;}else //两圆相交{double ang1 = Math.Acos((this.r1 * this.r1 + this.d * this.d - this.r2 * this.r2) / (2 * this.r1 * this.d)); //弧度制,用于计算扇形面积(所占圆的比例)double ang2 = Math.Acos((this.r2 * this.r2 + this.d * this.d - this.r1 * this.r1) / (2 * this.r2 * this.d));//return ang1 * this.r1 * this.r1 + ang2 * this.r2 * this.r2 - this.r1 * d * Math.Sin(ang1); //两圆相交时,相交面积 = 两扇形面积 - 两圆心与两交点所组成的四边形的面积area = ang1 * this.r1 * this.r1 + ang2 * this.r2 * this.r2 - this.r1 * d * Math.Sin(ang1); //两圆相交时,相交面积 = 两扇形面积 - 两圆心与两交点所组成的四边形的面积}return area;}public void OutResult(){Console.WriteLine("两个圆的半径分别为: {0} 和 {1}, 圆心距是:{2}", this.r1, this.r2, this.d);Console.WriteLine("两个圆所相交的面积为:{0}",Math.Round(IntersecArea(),2));}}
}
鼠标悬停此处预览测试样例
Java
// 即将用于和工厂方法实现实例化进行对比
public class CircleArea {private double _r1;private double _r2;private double _d;public double get_r1() {return _r1;}public double get_r2() {return _r2;}public double get_d() {return _d;}public void set_r1(double _r1) {this._r1 = _r1;}public void set_r2(double _r2) {this._r2 = _r2;}public void set_d(double _d) {this._d = _d;}CircleArea(){this._r1 = .0;this._r2 = .0;this._d = .0;}CircleArea(double r1, double r2, double d){this._r1 = r1;this._r2 = r2;this._d = d;}public double IntersecArea(){if (this._r1 + this._r2 <= this._d) //两圆外离(切){return .0;}else if (Math.abs(this._r1 - this._r2) >= this._d) //两圆内含(切)(此处必须要有等号,要处理同心圆的特例情形){return (this._r1 < this._r2 ? Math.PI * this._r1 * this._r1 : Math.PI * this._r2 * this._r2);}else //两圆相交{double ang1 = Math.acos((this._r1 * this._r1 + this._d * this._d - this._r2 * this._r2) / (2 * this._r1 * this._d)); //弧度制,用于计算扇形面积(所占圆的比例)double ang2 = Math.acos((this._r2 * this._r2 + this._d * this._d - this._r1 * this._r1) / (2 * this._r2 * this._d));return ang1 * this._r1 * this._r1 + ang2 * this._r2 * this._r2 - this._r1 * _d * Math.sin(ang1); //两圆相交时,相交面积 = 两扇形面积 - 两圆心与两交点所组成的四边形的面积}}public void OutResult(){System.out.printf("两个圆的半径分别为: %f 和 %f%n圆心距是:%f\n", this._r1, this._r2, this._d);//%n和\n都可以实现换行功能System.out.format("两个圆所相交的面积为:%.2f",IntersecArea());}
}
鼠标悬停于此预览测试样例
Kotlin
待更
C++
待更
C
待更
Python
待更
JavaScript
待更
Html
待更
objective-c
待更
shell
待更
perl
待更
ruby
待更
汇编语言
待更
拓展
改成两个圆环以后呢?
待更
2019/11/28 15:08
求任意两圆相交的面积(不限程序设计语言版本)相关推荐
- 两圆相交求面积 hdu5120
转载 两圆相交分如下集中情况:相离.相切.相交.包含. 设两圆圆心分别是O1和O2,半径分别是r1和r2,设d为两圆心距离.又因为两圆有大有小,我们设较小的圆是O1. 相离相切的面积为零,代码如下: ...
- 求两圆相交面积(模板)
两圆相交分如下集中情况:相离.相切.相交.包含. 设两圆圆心分别是O1和O2,半径分别是r1和r2,设d为两圆心距离.又因为两圆有大有小,我们设较小的圆是O1. 相离相切的面积为零,代码如下: dou ...
- Square Card 计算几何-两圆相交面积
题意 : 给两个圆,分别代表得分区域和奖励区域,边长为a的正方形以均等概率扔到平面后绕中心旋转,保证一定会有某时刻正方形完全在得分区域内. 如果某时刻正方形完全落在区域内,获得相应分数,求正方形 既获 ...
- python求交点坐标_Python - 两圆相交求交点坐标
Python - 两圆相交求交点坐标 Max.Bai 2016-05-16 Python - 两圆相交求交点坐标 三轴机械臂求坐标问题,其实转化为平面问题就是两圆相交求交点问题,交点算出来就可以用反三 ...
- 计算几何——多边形和圆相交的面积
汇总篇:计算几何汇总 原文地址:https://www.cnblogs.com/lxglbk/archive/2012/08/12/2634192.html 代码部分为个人原创 圆与多变形相交的面积 ...
- 【算法记录/计算几何】扇形与圆相交的面积(待解决)
目录 问题描述 近似求法 一种分类方式 000 另一种分类方式 外切或相离 相交 包含或内切 问题描述 假设扇形区域如上图,求一个圆与该扇形相交部分的面积. (有木有大佬告诉我怎么求啊) 近似求法 细 ...
- MATLAB求图片两圆圆心,求助:如何求此图中两圆的圆心距?
对于你给出的图片,我根据之前提到的思路编写了以下程序.感觉还蛮准的.这个程序只能用于两圆相交的情况.当小圆在大圆内部时,需要在其中加以判定.仅供参考. clear;clc c = imread('1. ...
- 利用函数求任意两个数之间的和
利用函数求任意两个数之间的和 <!DOCTYPE html> <html lang="en"><head><meta charset=&q ...
- 设计求任意两个整数和的web程序,用户通过提交页面(input.jsp)输入两个整数,并提交给一个(sum.jsp)程序
张继军 董卫 <java web 应用开发技术与实案列教程>课后习题之第三章第4题 题解 题目内容 源代码 input.jsp sum.jsp positive.jsp negetive. ...
最新文章
- 基于正交投影的点云局部特征描述详解
- Python实现与LeetCode--堆
- extern用法详解(转)
- Hadoop Yarn任务优先级(作业优先级、应用优先级)设置
- Comptia Strata认证考点相关情况【2018.06.05更新】
- ASP.NET AJAX 控件开发基础
- Shiro 身份验证
- yum安装指定(特定)版本(旧版本)软件包的方法
- mysql查询连续次数_Mysql如何查询连续的时间次数
- python之min
- 机器学习——Gradient Boost Decision Tree(Treelink)
- 用tomcat搭建https
- MAML代码及理论的深度学习 PyTorch二阶导数计算
- 题目---小Q定义了一种数列称为翻转数列: 给定整数n和m, 满足n能被2m整除。对于一串连续递增整数数列1, 2, 3, 4..., 每隔m个符号翻转一次, 最初符号为'-';。
- Redis详解之特殊数据类型GEO及底层数据结构
- 获取硬件序列号(注册机)
- Windows常用快捷组合键整理Dos命令基础集合
- 复杂美区块链技术专利技术之一:交易组解析
- gtx1060和gtx1650 的差距 哪个好
- eclipse怎么查看jsp生成的class文件
热门文章
- LCM液晶显示模组是什么,液晶显示模块有几种类型呢
- 从Hadoop到Spark和Flink,大数据处理框架十年激荡发展史
- Django 使用不同配置文件的三种方式
- TypeError: Converting circular structure to JSON
- error converting to execution character set illegal byte sequence报错解决办法
- 与日历有关的小程序推荐
- 如何在Windows 11上的WSL2做到GPU直通,并用Deepracer本地训练炸干电脑的资源(显卡降价了,618等等党还等什么,一起来加入Deepracer的比赛学习交流吧)
- App Store上下载和安装Xcode
- 想要通过炒币财富自由?先看看这篇文章吧!
- Android开发————简易App设计(一)