
Code

/**//*
2008-12-27 20:57:36 Accepted 1071 0MS 0K 1090 B
给你一条抛物线和一条直线,用积分求面积
*/
#include<iostream>
#include<cmath>
double a,b,c;//抛物线公式y=ax^2+bx+c
double k,lb;//直线公式y=kx+lb
double y[3],x[3];//存储三个点
double res;//存放结果
double D(double m[][3])//球行列式的值


{
return m[0][0]*m[1][1]*m[2][2]+
m[0][1]*m[1][2]*m[2][0]+
m[0][2]*m[1][0]*m[2][1]-
m[0][2]*m[1][1]*m[2][0]-
m[0][1]*m[1][0]*m[2][2]-
m[0][0]*m[2][1]*m[1][2];
}
void mkabc()//求出抛物线和直线


{
double m[3][3];
double d,da,db,dc;
int i;
for(i=0;i<3;i++)
scanf("%lf%lf",x+i,y+i);
for(i=0;i<3;i++) m[i][0]=x[i]*x[i];
for(i=0;i<3;i++) m[i][1]=x[i];
for(i=0;i<3;i++) m[i][2]=1;
d=D(m);
for(i=0;i<3;i++) m[i][0]=y[i];
da=D(m);
for(i=0;i<3;i++) m[i][1]=y[i];
for(i=0;i<3;i++) m[i][0]=x[i]*x[i];
db=D(m);
for(i=0;i<3;i++) m[i][2]=y[i];
for(i=0;i<3;i++) m[i][1]=x[i];
dc=D(m);
a=da/d; b=db/d; c=dc/d;//用克拉默法则求未知数
k=(y[2]-y[1])/(x[2]-x[1]);
lb=y[2]-k*x[2];
}
double f(double x)//积分公式


{
return pow(x,3)*a+pow(x,2)*b+c*x;
}
void inte()//求积分


{
a=a/3;
c=c-lb;
b=(b-k)/2;
res=f(x[2])-f(x[1]);
}
int main()


{
int t;
scanf("%d",&t);
while(t--)

{
mkabc();
inte();
printf("%.2lf\n",res);
}
return 0;
}
posted @
2008-12-27 21:06
sunjian
阅读(
546)
评论()
收藏
举报