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的原因,因为一定要是正数
这个的区域面积可以看做,圆的高度-扇形的高度 对x积分
#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;
}