hdu acm-step 2.1.7 The area

本题题意:依次给出3个点P1,P2,P3,其中P2,P3是抛物线与直线的交点,P1是抛物线的顶点,求抛物线与直线的面积。

代码如下:

#include <cstdio>
using namespace std;
struct Node
{
        double x,y;
};
Node s[3];
double Lagrange(Node s[],int n,double &a,double &b,double &c)
{
        int t1,t2,t3,d,p,q;
        for(int i=0;i<n;i++)
        {
                t1 = i;
                t2 = (i+1)%3;
                t3 = (i+2)%3;
                d = (s[t1].x-s[t3].x)*(s[t1].x-s[t2].x);
                p = s[t2].x*s[t3].x;
                q = s[t2].x+s[t3].x;
                a+=s[t1].y/d;
                b+=-s[t1].y*q/d;
                c+=s[t1].y*p/d;
        }
}
int main()
{
        int T;
        scanf("%d",&T);
        while(T--)
        {
                double a=0,b=0,c=0;
                for(int i=0;i<3;i++)scanf("%lf%lf",&s[i].x,&s[i].y);
                Lagrange(s,3,a,b,c);
                double s1 = a/3 * (s[1].x * s[1].x * s[1].x - s[2].x * s[2].x * s[2].x) + b*0.5*(s[1].x*s[1].x-s[2].x*s[2].x) + c*(s[1].x - s[2].x);
                double s2 = (s[1].x - s[2].x) * (s[1].y + s[2].y) * 0.5;
                printf("%.2lf\n",s2 - s1);
        }
        return 0;
}

感觉又写了个垃圾代码....

不过还是学到了点东西,这个最重要...

求抛物线方程用的是拉格朗日插值法,通过三点确定一个一元二次方程...

直线面积直接用梯形公式求了,然后两式相减就是结果了(注意正负)。

posted @ 2017-08-21 15:49  mtl6906  阅读(134)  评论(0编辑  收藏  举报