y=sqrt(1-x*x)①
y=sqrt(0.5)+sqrt(1/4-x*x)②
fun(x)=max(sqrt(0.5)+sqrt(1/4-x*x)-sqrt(1-x*x),0) x∈[-0.5,0.5] 取max的原因,因为一定要是正数
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include<time.h>
#include<stdlib.h>
using namespace std;
int a,b;
double fun(double x)
{
return max(0.0,sqrt(0.5)+sqrt(0.25-x*x)-sqrt(1-x*x));
}
double Simpson(double l,double r)
{
return (fun(l)+fun(r)+4*fun((l+r)/2))/6*(r-l);
}
double asr(double l,double r,double eps,double last)
{
// printf("%f %f\n",l,r);
double m=(l+r)/2,a,b,ans;
a=Simpson(l,m);
b=Simpson(m,r);
ans=a+b;
if(fabs(last-ans)>eps)
{
ans=asr(l,m,eps/2,a)+asr(m,r,eps/2,b);
}
return ans;
}
double asr(double l,double r,double eps)
{
return asr(l,r,eps,Simpson(l,r));
}
int main()
{
int n,l,r;
double k;
k=asr(-0.5,0.5,1e-14);
scanf("%d",&n);
while(n--)
{
scanf("%d",&l);
printf("%.2f\n",l*l*k*2);
}
return 0;
}
本文介绍了一种通过数值积分的方法来计算由两个圆形区域相交形成的特殊几何形状面积的算法实现。具体而言,通过定义一个函数来表达该形状的高度,并采用辛普森法则及其递归形式进行精确积分。
334

被折叠的 条评论
为什么被折叠?



