hud1071 The area

来源:互联网 发布:besiege mac版 编辑:程序博客网 时间:2024/04/29 17:44

原题链接:click here

题目大意:一个二次曲线与直线相交,交点已知。求它们围成的封闭区域的面积。

思路:利用交点求出曲线和和直线参数,得到曲线和直线方程,再利用定积分求面积。


设二次曲线方程为:y=a*X^2+b*x+c;(1)

x1=-b/2a;(2)(对称轴方程)

所以b=-2a*x1;(3)

将p1(x1,y1),p2(x2,y2)代入(1)式后再把(2)式代入整理可得:

a=(y2-y1)/(x2-x1)^2;(4)

c=y1-(a*x1*x1+b*x1);(5)

由(4)(3)(5)可知得a,b,c从而确定抛物线方程。

从p2到p3对y=a*x*x+b*x+c积分,再减去直线从p2到p3积分(为一个梯形面积,直接用梯形面积公式可简化运算)就是所求阴影部分面积。

代码如下:

#include<stdio.h>int main(){    double x1,x2,x3,y1,y2,y3,a,b,c,s1,s2,s3,s;    int t;    while(scanf("%d",&t)!=EOF)    {        while(t--)        {            scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);            /*计算二次曲线的三个系数*/            a=(y2-y1)/((x2-x1)*(x2-x1));            b=-2*a*x1;            c=y1-(a*x1*x1+b*x1);            s1=(y2+y3)*(x3-x2)/2.0;//直线从p2到p3的积分正好是一个梯形面积,直接用公式计算            s2=(a/3.0)*x2*x2*x2+(b/2.0)*x2*x2+c*x2;//定积分求面积            s3=(a/3.0)*x3*x3*x3+(b/2.0)*x3*x3+c*x3;            s=s3-s2-s1;            printf("%.2lf\n",s);        }    }    return 0;}


原创粉丝点击