Problem DescriptionIgnatius bought a land last week, but he didn't know the area of the land because the land is enclosed by a parabola and a straight line. The picture below shows the area. Now given all the intersectant points shows in the picture, can you tell Ignatius the area of the land?Note: The point P1 in the picture is the vertex of the parabola. InputThe input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. OutputFor each test case, you should output the area of the land, the result should be rounded to 2 decimal places. Sample Input2 5.000000 5.000000 0.000000 0.000000 10.000000 0.000000 10.000000 10.000000 1.000000 1.000000 14.000000 8.222222 Sample Output33.33 40.69 |
纯粹的数学积分题。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
/*设抛物线方程为 y = a(x - b)^2 + c; 直线方程为 y = kx + d;*/
double a, b, c, d, k;
double fun(double x){
return a*x*x*x/3 - (2*a*b+k)*x*x/2 + (a*b*b+c-d)*x;
}
int main() {
int t;
scanf("%d", &t);
while(t--) {
double x1, y1, x2, y2, x3, y3;
scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3);
b = x1;
c = y1;
a = (y2 - y1)/(x2 - x1)/(x2 - x1);
k = (y3 - y2)/(x3 - x2);
d = y2 - k*x2;
printf("%.2f\n", fabs(fun(x2) - fun(x3)));
}
return 0;
}