求两圆相交部分面积(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. 输出是按照一定顺序输出的. 分析: 首先情况比较多,要一一判断,不要漏掉. 如果 ...
随机推荐
- BZOJ 1001: [BeiJing2006]狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 20029 Solved: 4957[Submit][ ...
- IIS7.0部署MVC/WebApi项目,报404.4错误
在web.config中添加如下的配置试试: <system.webServer> <modules runAllManagedModulesForAllRequests=" ...
- Linux常用获取进程占用资源情况手段
测试环境:Ubuntu14.04 1. 获取进程ID号 ps -aux | grep your_process_name 例如: xxx@xxx:~$ ps -e |grep Midlet|awk ...
- ImportError: cannot import name '_imagingtk'
问题描述 使用tkinter画pillow生成的图片时,在tkinter中抛出此异常. 解决方案 pip install -I --no-cache-dir Pillow 更新pillow 重启解决一 ...
- vue.js 第五课
计算属性 1.基础例子 2.计算属性 vs $watch 3.计算 setter 4.计算属性开发实务demo 1.计算属性 computed( 电脑computer) (区别普通属性) 计算属性 ...
- php代码小实例
php多图上传 <html> <meta http-equiv="Content-Type" content="text/html; charset=u ...
- JavaIO学习笔记(五)
JavaIO前期准备 什么是同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 什么是异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO ...
- listbox 多选删除(找了好多都不行,终于让我写出来了)
方法一:两个for循环 aspx.cs private string id=""; protected void btn_del_Click(object sender, Even ...
- 怎么用XMind辅助电商工作
随着电商的迅猛发展,突出了电商运营管理的重要性.能不能做好电商,就要看他的管理做的好不好,全面不全面!电商的突破与进步,离不开全方位的协同管理.之前,小编有给大家介绍过电商量化管理的四大利器:XMin ...
- Atomikos实现多数据源的事物管理
之前试过使用Spring动态切换数据库,通过继承AbstractRoutingDataSource重写determineCurrentLookupKey()方法,来决定使用那个数据库.在开启事务之前, ...