题目链接:点击这里
题意:给出一个椭圆和[l,r],求椭圆横坐标在这个范围内的面积。
根据椭圆公式可知 y=b2−b2∗x2a2−−−−−−−−√ ,所以直接利用面积积分公式 S=2∫rlydx ,套simpson积分即可。
#include <bits/stdc++.h>
using namespace std;
const double pi = 3.14159265;
const double eps = 1e-5;
double L, R, a, b;
double F (double x) {
return sqrt (b*b-b*b/a/a*x*x);
}
double simpson (double a, double b) {
double c = a+(b-a)/2;
return (F(a)+4*F(c)+F(b))*(b-a)/6;
}
double asr (double a, double b, double eps, double A) {
double c = a+(b-a)/2;
double L = simpson (a, c), R = simpson (c, b);
if (fabs (L+R-A) <= 15*eps) return L+R+(L+R-A)/15.0;
return asr (a, c, eps/2, L)+asr (c, b, eps/2, R);
}
double asr (double a, double b, double eps) {
return asr (a, b, eps, simpson (a, b));
}
int main () {
int t, kase = 0;
cin >> t;
while (t--) {
cin >> a >> b >> L >> R;
printf ("%.3f\n", 2*asr (L, R, eps));
}
return 0;
}