原题链接: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; }