1. 程式人生 > >The area HDU - 1071

The area HDU - 1071

The area HDU - 1071

題意:給出如圖的拋物線和直線,並且給出頂點。問買面積。要用到微積分,拋物線公式,兩點式。

公式

 

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct node
{
    double x,y;
};
int main()
{
    int t;
    scanf("%d",&t);
    node p1,p2,p3;
    while(t--)
    {
        scanf("%lf%lf",&p1.x,&p1.y);
        scanf("%lf%lf",&p2.x,&p2.y);
        scanf("%lf%lf",&p3.x,&p3.y);
        //拋物線y=a(x-p1.x)^2+p1.y;y=ax^2+bx+c;
        double a=(-p1.y+p2.y)/((p2.x-p1.x)*(p2.x-p1.x));
        double b=-a*2*p1.x;
        double c=a*p1.x*p1.x+p1.y;
        double k=(p3.y-p2.y)/(p3.x-p2.x);
        double t=p3.y-k*p3.x;

        double ans=1.0/3.0*a*(p3.x*p3.x*p3.x-p2.x*p2.x*p2.x)+0.5*(b-k)*(p3.x*p3.x-p2.x*p2.x)+(c-t)*(p3.x-p2.x);
        printf("%.2f\n",ans);
    }
    return 0;
}