计算两圆相交面积

2023-05-16

转自:[模板] 求两圆相交面积(模板) 

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

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

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

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(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;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算两圆相交面积 的相关文章

随机推荐

  • Docker与anaconda+jupyter

    Arch docker的安装 pacman 安装docker sudo pacman S docker docker启动 sudo systemctl start docker 设置开机启动docker sudo systemctl ena
  • Opencv目标追踪

    参考 xff1a https www pyimagesearch com 2018 07 30 opencv object tracking 引言 Opencv作为图像处理开源库包含了Object Tracking目标追踪的一些API xf
  • 使用cmake编译,组织C++项目

    文章目录 前言例一例二例三 前言 这篇博客是我对cmake用法的一些经验总结 还很浅显 如果有错误或者更好的方案 欢迎指正 使用方法统一为在build目录中执行 cmake make 我觉得养成外部编译是一个好习惯 例一 目录结构为 lzj
  • Spring Security Oauth2.0认证授权

    基本概念 认证 用户认证就是判断一个用户的身份是否合法的过程 xff0c 用户去访问系统资源时系统要求验证用户的身份信息 xff0c 身份合法方可继续访问 xff0c 不合法则拒绝访问 常见的用户身份认证方式有 用户名密码登录 xff0c
  • C语言实现HTTP的GET和POST请求

    HTTP请求和IP TCP 所谓的HTTP协议是基于IP TCP协议的 xff0c 所以要获取远端的html数据只要创建socket对象就足够了 xff1b HTTP是基于IP TCP加上了网络请求的固定格式 get 请求 include
  • 英伟达GPU安装教程

    英伟达GPU安装教程
  • 四种插头类型:XH、VH、SM、HY

    PH1 25mm HY2 0mm XH2 5 2 54mm xff08 这两个其实是一样的 xff09 VH3 96mm 插头分成三种类型 xff1a XH xff1b VH xff1b SM xff1b HY XH 4Y 是插头 xff1
  • STM32F1C8T6Flash读取音频和DAC播放

    文章目录 一 Flash简介1 Flash原理2 STM32F1中的Flash 二 Flash地址空间的数据读取1 题目要求2 CUbeMX工程建立3 Keil工程修改4 STlink调试说明5 调试运行 三 基于片内Flash的提示音播放
  • C语言中的头文件为什么不能定义变量

    1 前提 在实际项目中 xff0c 会遇到这样的情况 xff0c 在链接阶段 xff0c 会提示定义在头文件中的变量 xff0c 重定义 xff0c 然后将将头文件中的变量定义成static类型 xff0c 然后 xff0c 不报错误了 例
  • Ubuntu16.04安裝ROS

    此文章在前人的基礎上 xff0c 並把安裝遇到的問題寫出來 Ubuntu16 04安装ROS Kinetic详细过程 https blog csdn net weixin 43159148 article details 83375218
  • B-spline的理解与路径规划中的应用及C++代码的实现

    研究项目 xff0c 无人机的路径规划 xff0c 需要用到B样条 xff0c 所以在此写下B spline的结合C 43 43 代码的理解以及在项目中的应用 一 阶数p 阶数 61 所有权重中t的最高次幂 61 控制点数量 1 xff1b
  • Jetson TX2 各个模式

    Jetson TX2 工作模式及相应的CPU和GPU频率 xff1a 上电的时候 xff0c 默认最低功耗模式1 xff0c 风扇不转 1 直接运行home下的jetson clocks sh xff0c 开启最大频率 sudo jetso
  • 网络通信基础知识—网络通信的发展历程

    网络通信基础知识 网络通信的发展历程 xff08 1 xff09 单机阶段 xff08 2 xff09 局域网阶段 xff08 3 xff09 广域网internet阶段 xff08 很多个局域网之间通信 xff09 xff08 4 xff
  • win7下装ubuntu双系统 硬盘安装详细教程

    本文转载自http www linuxidc com Linux 2014 10 108430 htm https jingyan baidu com article e4d08ffdace06e0fd2f60d39 html 在自己安装过
  • ROS导航——配置机器人的导航功能(move_base包)

    中间部分是整个导航的核心部分 xff0c 由move base功能包提供 配置如下 xff1a lt launch gt lt node pkg 61 34 move base 34 type 61 34 move base 34 resp
  • 基于docker安装tensorflow

    最近在自学机器学习 xff0c 大热的Tensorflow自然不能错过 xff0c 所以首先解决安装问题 xff0c 为了不影响本地环境 xff0c 所以本文基于Docker来安装Tensorflow xff0c 我的环境是Ubuntu16
  • okHttpUtil工具类

    pom文件 lt dependency gt lt groupId gt com squareup okhttp3 lt groupId gt lt artifactId gt okhttp lt artifactId gt lt vers
  • 基于采样的RRT/RRT*/RRT_connect算法笔记及C++实现

    本文记录常见的基于采样的RRT算法及相关改进算法 xff08 RRT xff0c RRT connect xff09 的原理和代码实现效果 与上一章介绍A 算法的文章不同 xff0c 本文会先给出几种算法之间的效果对比 xff0c 先有个直
  • STM32F103ZE驱动PMW3901光流模块

    本文将会简单的介绍如何使用STM32F103ZE驱动PMW3901光流模块 xff0c 使用标准库 所用材料如下 一块 STM32F103最小系统板以及一个 PMW3901光流模块 通过查阅PMW3901的数据手册可以得知 xff0c 该芯
  • 计算两圆相交面积

    转自 xff1a 模板 求两圆相交面积 xff08 模板 xff09 两圆相交分如下集中情况 xff1a 相离 相切 相交 包含 设两圆圆心分别是O1和O2 xff0c 半径分别是r1和r2 xff0c 设d为两圆心距离 又因为两圆有大有小