问题描述 伊格纳修斯上周买了一块土地,但他不知道这块土地的面积,因为土地被抛物线和一条直线包围着。下图显示了该区域。现在考虑到图片中显示的所有交叉点,你能告诉Ignatius这片土地的面积吗?注意:图中的点P1是抛物线的顶点。
|
输入 输入包含几个测试用例。输入的第一行是单个整数T,它是测试用例的数量。T测试案例如下。
|
产量 对于每个测试用例,您应该输出土地面积,结果应四舍五入到小数点后两位。
|
样本输入 2 5.000000 5.000000 0.000000 0.000000 10.000000 0.000000 10.000000 10.000000 1.000000 1.000000 14.000000 8.222222
|
样本输出 33.33 40.69 暗示 对于浮动可能不够准确,请使用double而不是float。 |
#include<cstdio>
#include<cstdlib>
int main()
{
int T;
double X0, X1, X2, Y0, Y1, Y2, a, b, c, k, B, m, n;
scanf_s("%d", &T);
while(T--)
{
scanf_s("%lf%lf%lf%lf%lf%lf", &X0, &Y0, &X1, &Y1, &X2, &Y2);
a = (Y0 - Y1) / ((X0 - X1)*(X0 - X2)) - (Y1 - Y2) / ((X1 - X2)*(X0 - X2));
b = (Y0 - Y1) / (X0 - X1) - ((X0 + X1)*(Y0 - Y1)) / ((X0 - X1)*(X0 - X2)) + (X0 + X1)*(Y1 - Y2) / ((X1 - X2)*(X0 - X2));
c = Y0 - a * X0*X0 - b*X0;
k = (Y1 - Y2) / (X1 - X2);
B = Y1 - k * X1;
m = 1 / 3.0*a*X1*X1*X1 + 0.5*b*X1*X1 + c * X1 - 0.5*k*X1*X1 - B * X1;
n= 1 / 3.0*a*X2*X2*X2 + 0.5*b*X2*X2 + c * X2 - 0.5*k*X2*X2 - B * X2;
printf("%.2lf\n", n - m);
}
system("pause");
return 0;
}