题目链接:点击打开链接
给定椭圆的标准方程,椭圆外一点(x,y) 且 x>=a , abs(y)>=b
求阴影面积
先求出直线与椭圆的交点(x1, y1),
然后积分即可。
#include <stdio.h> #include <iostream> #include <algorithm> #include <sstream> #include <stdlib.h> #include <iomanip> #include <string.h> #include <limits.h> #include <vector> #include <string> #include <time.h> #include <math.h> #include <queue> #include <stack> #include <set> #include <map> const double eps = 1e-8; const double pi = acos(-1.0); template <class T> inline bool rd(T &ret) { char c; int sgn; if (c = getchar(), c == EOF) return 0; while (c != '-' && (c<'0' || c>'9')) c = getchar(); sgn = (c == '-') ? -1 : 1; ret = (c == '-') ? 0 : (c - '0'); while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0'); ret *= sgn; return 1; } template <class T> inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if (x>9) pt(x / 10); putchar(x % 10 + '0'); } using namespace std; typedef long long ll; double a, b, x, y; int main(){ int T; rd(T); while (T--){ cin >> a >> b >> x >> y; y = abs(y); double k = y / x; double x1 = a*b / sqrt(b*b + a*a*k*k); double y1 = k * x1; double ans = - x1*sqrt(a*a - x1*x1) / 2 + a*a*acos(x1 / a) / 2; ans *= b / a; ans += x1*y1 / 2; cout << fixed << setprecision(2) << ans << endl; } return 0; }
时间: 2024-10-30 21:46:11