求两圆相交部分面积(C++)
已知两圆圆心坐标和半径,求相交部分面积:
#include <iostream>
using namespace std;
#include<cmath>
#include<stdio.h>
#define PI 3.141593
struct point//点
{
double x,y;
};
struct circle//圆
{
point center;
double r;
};
float dist(point a,point b)//求圆心距
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
} int main()
{
circle a,b;
while(cin>>a.center.x>>a.center.y>>a.r>>b.center.x>>b.center.y>>b.r)
{
if((dist(a.center,b.center)+min(a.r,b.r))<=max(a.r,b.r))//两圆内交或包含
{
if(a.r<b.r) printf("%.3lf\n",PI*a.r*a.r);
else printf("%.3lf\n",PI*b.r*b.r);
}
else if(dist(a.center,b.center)>=(a.r+b.r))//两圆外交或相离
cout<<"0.000"<<endl;
else
{
double length=dist(a.center,b.center);
double d1=*acos((a.r*a.r+length*length-b.r*b.r)/(*a.r*length)); //求两扇形圆心角
double d2=*acos((b.r*b.r+length*length-a.r*a.r)/(*b.r*length));
double area1=a.r*a.r*d1/-a.r*a.r*sin(d1)/;
//根据圆心角求扇形面积,减去三角形面积,得到相交部分面积
//扇形面积:S=PI*r*r*θ/(2*PI) 三角形面积:S=1/2*a*c*sin(B)
double area2=b.r*b.r*d2/-b.r*b.r*sin(d2)/;
double area=area1+area2;
printf("%.3lf\n",area);
}
}
return ;
}
求两圆相交部分面积(C++)的更多相关文章
- POJ 2546 & ZOJ 1597 Circular Area(求两圆相交的面积 模板)
题目链接: POJ:http://poj.org/problem? id=2546 ZOJ:problemId=597" target="_blank">http: ...
- hdu 5120 (求两圆相交的面积
题意:告诉你两个圆环,求圆环相交的面积. /* gyt Live up to every day */ #include<cstdio> #include<cmath> #in ...
- hdu5858 Hard problem(求两圆相交面积)
题目传送门 Hard problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- 两圆相交求面积 hdu5120
转载 两圆相交分如下集中情况:相离.相切.相交.包含. 设两圆圆心分别是O1和O2,半径分别是r1和r2,设d为两圆心距离.又因为两圆有大有小,我们设较小的圆是O1. 相离相切的面积为零,代码如下: ...
- POJ 2546 Circular Area(两个圆相交的面积)
题目链接 题意 : 给你两个圆的半径和圆心,让你求两个圆相交的面积大小. 思路 : 分三种情况讨论 假设半径小的圆为c1,半径大的圆为c2. c1的半径r1,圆心坐标(x1,y1).c2的半径r2,圆 ...
- poj2546Circular Area(两圆相交面积)
链接 画图推公式 这两种情况 都可用一种公式算出来 就是两圆都求出圆心角 求出扇形的面积减掉三角形面积 #include <iostream> using namespace std; # ...
- [hdu 3264] Open-air shopping malls(二分+两圆相交面积)
题目大意是:先给你一些圆,你可以任选这些圆中的一个圆点作圆,这个圆的要求是:你画完以后.这个圆要可以覆盖之前给出的每一个圆一半以上的面积,即覆盖1/2以上每一个圆的面积. 比如例子数据,选左边还是选右 ...
- LightOJ 1118--Incredible Molecules(两圆相交)
1118 - Incredible Molecules PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Lim ...
- UVa 10674 (求两圆公切线) Tangents
题意: 给出两个圆的圆心坐标和半径,求这两个圆的公切线切点的坐标及对应线段长度.若两圆重合,有无数条公切线则输出-1. 输出是按照一定顺序输出的. 分析: 首先情况比较多,要一一判断,不要漏掉. 如果 ...
随机推荐
- [No000094]SVN学习笔记4-版本库概念与部分日常操作
基本概念 版本库 Subversion 使用集中的数据库,它包含了所有的版本控制文件及其完整历史.这个数据库就是版本库.版本库通常位于运行 Subversion 服务器的文件服务器上,向 Subver ...
- pcl曲面重建模块-poisson重建算法示例
poisson曲面重建算法 pcl-1.8测试通过 #include <iostream> #include <pcl/common/common.h> #include &l ...
- [LeetCode] Word Search 词语搜索
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- [LeetCode] Integer to Roman 整数转化成罗马数字
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...
- 单点登录改进版-使用ajax分发cookie避免重定向轮询
前言 继上一篇博文:可跨域的单点登录(SSO)实现方案[附.net代码]虽然实现了单点登录,也存在很多不合理的地方.很多热心的朋友也给出了很多指导性的意见,特别是 LoveCoder提出的意见. 在很 ...
- 关于#define for if(false);else for
今日在看一个第三方代码时看到了#define for if(false);else for 这样的一种定义,不明白这样用法的目的,于是查了一下. 这是一个兼容vc6.0的用法,csdn上有这个问题的回 ...
- xv6的课本翻译之——附录B 系统启动器
Appendix B 附录 B Figure B-1 The relationship between logical, linear, and physical addresses. 图B-1:逻辑 ...
- Mybatis传入参数类型为Map
mybatis更新sql语句: <update id="publishT00_notice" parameterType="Map"> update ...
- 封装js的部分兼容性
//获取标签的内容(兼容所有浏览器)function getInnerText(element) { //能力检测(先判断如果这个能力有这个) if(typeof element.innerText ...
- RabbitMQ 集群
集群 消息队列要想在项目里用的溜,还是要做集群.稳定可靠 但是如果只有一个服务器的话 崩溃的话还是会懵逼的.所以集群化让崩溃的损失降到最小. 在这里我要用三台机器来做集群,不同系统在一起集合才叫酸爽 ...