hdu 5120 圆和圆交面积模板

本文介绍了一种计算两个圆形区域相交部分面积的方法。通过定义圆形的坐标和半径,利用数学公式来确定不同情况下(完全分离、一个圆在另一个圆内部、部分重叠)相交面积的具体计算方式。
部署运行你感兴趣的模型镜像

简单的集合题...关键是板子....

#include <iostream>

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define repf(i,a,b) for(int i=(a);i<=(b);i++)

using namespace std;

typedef long long LL;
const double PI = 3.141592653;

/*struct Round
{
    double x , y;
    double r;
}r[4];

double dis ( Round a , Round b )
{
    return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}

double solve ( Round a , Round b )
{
    double d = dis(a,b);
    if ( d >= a.r + b.r ) return 0;
    if ( d <= fabs(a.r - b.r))
    {
        double r = a.r < b.r ? a.r : b.r;
        return PI * r * r;
    }
    double ang1 = acos((a.r * a.r + d * d - b.r * b.r)/2. / a.r / d );
    double ang2 = acos((b.r * b.r + d * d - a.r * a.r)/2. / b.r / d );
    double ret = ang1 * a.r * a.r + ang2 * b.r * b.r - d * a.r * sin(ang1);
    return ret;
}*/

struct circle
{
    double x,y;
    double r;
}r[4];

double solve (point a,point b)
{
    double s,d,t,t1;
    d=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    if(d>=a.r+b.r) s=0;
    else if(d<=fabs(a.r-b.r)) s=min(acos(-1.0)*a.r*a.r,acos(-1.0)*b.r*b.r);
    else
    {
        t=(a.r*a.r+d*d-b.r*b.r)/2.0/d;
        t1=sqrt(a.r*a.r-t*t);
        s=-d*t1+a.r*a.r*acos(t/a.r)+b.r*b.r*acos((d-t)/b.r);
    }
    return s;
}

int main ( )
{
    int t;
    double rr,R,x1,y1,x2,y2;
    scanf ( "%d" , &t );
    int c = 1;
    while ( t-- )
    {
       scanf ( "%lf%lf" , &rr , &R );
       scanf ( "%lf%lf" , &x1 , &y1 );
       scanf ( "%lf%lf" , &x2 , &y2 );
       r[1].r = r[3].r = rr;
       r[2].r = r[4].r = R;
       r[1].x = r[2].x = x1;
       r[1].y = r[2].y = y1;
       r[3].x = r[4].x = x2;
       r[3].y = r[4].y = y2;
       double ans = solve ( r[2] , r[4] );
       ans -= solve ( r[1] , r[4] );
       ans -= solve ( r[2] , r[3] );
       ans += solve ( r[1] , r[3] );
       printf ( "Case #%d: " , c++ );
       printf ( "%.6f\n" , ans );
    }
}



您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性先进性。; 适合人群:具备一定控制理论基础Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值