HDU1071为一题纯粹的简单数学的积分问题,只是求解抛物线、直线之后求解其所夹的面积大小,代码如下:
#include"stdio.h"
#include"math.h"
double absf(double a)
{
return a>0?a:-a;
}
struct point
{
double x,y;
}p1,p2,p3;
int main()
{
int t;
scanf("%d",&t);
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-b)^2+c
double x1=p2.x,x2=p3.x;
double a=(p2.y-p1.y)/((p2.x-p1.x)*(p2.x-p1.x));//y2=a*(x2-b)^2+c,y3=a*(x3-b)^2+c两式相减求得a
double b=p1.x;
double c=p1.y;
double k=(p3.y-p2.y)/(p3.x-p2.x);//直线的斜率k
double d=p2.y-k*p2.x;
double s1=absf((a/3*x2*x2*x2-a*b*x2*x2+(a*b*b+c)*x2)-(a/3*x1*x1*x1-a*b*x1*x1+(a*b*b+c)*x1));
//抛物线的面积
double s2=absf(k*x2*x2/2+d*x2-k*x1*x1/2-d*x1);
double area = absf(s1-s2);
printf("%.2lf\n",area);
}
return 0;
}

1015

被折叠的 条评论
为什么被折叠?



