HDU 1071 The area(几何)

题目链接

这算是最简单的几何了吧。。。比赛的时候都没敢去做。。。唉,对积分信心不足啊。。各种变量,各种算。。。竟然还是1Y。。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define eps 0.00000001
 4 int main()
 5 {
 6     double x1,x2,x3,y1,y2,y3,w1,w2,q1,q2,q3,q4;
 7     double a,b,k1,ans1,ans2,k2,c,ans;
 8     int t;
 9     scanf("%d",&t);
10     while(t--)
11     {
12         scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
13         w1 = y2 - y1;//讲c约去,解只含有a,b的方程
14         w2 = y3 - y2;
15         q1 = x2*x2 - x1*x1;//w1 = q1*a - q2*b;
16         q2 = x1 - x2;//      w2 = q3*a - q4*b;  
17         q3 = x3*x3 - x2*x2;
18         q4 = x2 - x3;
19         b = (w1*q3 - w2*q1)/(q1*q4 - q2*q3);//解出b
20         a = (w1 + b*q2)/q1;//表示a
21         c = y3 - a*(x3*x3) - b*x3;//表示c
22         k1 = (y3 - y2)/(x3 - x2);//直线的斜率
23         k2 = y2 - k1*x2;//y = k1*x + k2;
24         ans1 = (a*x3*x3*x3)/3+(b*x3*x3)/2+c*x3-(k1*x3*x3)/2-k2*x3;//积分
25         ans2 = (a*x2*x2*x2)/3+(b*x2*x2)/2+c*x2-(k1*x2*x2)/2-k2*x2;
26         ans = ans1 - ans2;
27         if(ans < 0)
28         ans = -ans;
29         printf("%.2lf\n",ans+eps);
30     }
31     return 0;
32 }
posted @ 2012-08-04 16:00  Naix_x  阅读(156)  评论(0编辑  收藏  举报