1.題目連結。題目的意思很簡單,就是求陰影部分的面積,圖形是一個橢圓。
//#include"stdafx.h"
//#include<iostream>
//#include<cmath>
//using namespace std;
//#pragma warning(disable:4996)
//int main()
//{
// int T;
// scanf("%d", &T);
// int a, b, l, r;
// while (T--)
// {
// scanf("%d%d%d%d", &a, &b, &l, &r);
// if (l == r)
// {
// cout << "0.00" << endl;
// continue;
//
// }
// double ly = sqrt(pow(a, 2) - pow(l, 2));
// double ry = sqrt(pow(a, 2) - pow(r, 2));
// double dis = sqrt(pow(l - r, 2) + pow(ly - ry, 2));
// double csita = (2 * pow(a, 2) - pow(dis, 2))*1.0 / (2 * a*a);
// double sita = acos(csita);
// double s1 = a * a*sita / 2;
// double s2 = abs(l)*sqrt(pow(a, 2) - pow(l, 2)) / 2;
// double s3 = abs(r)*sqrt(pow(a, 2) - pow(r, 2)) / 2;
// double s = s1 + s2 + s3;
// s *= 2;
// s = s * (b*1.0 / a);
// printf("%.4lf\n", s);
// }
//}
#include"stdafx.h"
#include<iostream>
using namespace std;
const double eps = 1e-9;
#pragma warning(disable:4996)
//f函數
double a, b, l, r;
double f(double x)
{
return sqrt((1 - x * x / (a*a))*(b*b));
}
//Simpson公式
double simpson(double l, double r)
{
return (f(l) + 4 * f((l + r) / 2) + f(r))*(r - l) / 6;
}
double simpson(double l, double r,double all,double eps)
{
double mid = (l + r) / 2;
double L = simpson(l, mid);
double R = simpson(mid, r);
if (fabs(L + R - all) <= 15 * eps)
return L + R + (L + R - all) / 15;
return simpson(l, mid, L, eps / 2) + simpson(mid, r, R, eps / 2);
}
double simpson(double l, double r, double eps)
{
return simpson(l, r, simpson(l, r), eps);
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
scanf("%lf%lf%lf%lf", &a, &b, &l, &r);
printf("%.3lf\n", 2*simpson(l, r,1e-4));
}
return 0;
}