飞花的鱼塘(积分求面积咯~)

时间:2022-08-31 21:24:42
欢迎访问https://blog.csdn.net/lxt_Lucia~~

dalao们点个关注呗~~


水题emmm,但是还是想发一下,说不定就有dalao来了呢!Problem is coming~~~~


Description

 一日,飞花壕在稷下湖游玩,忽然,飞花巨有了一个养鱼的想法,于是,他大手一挥,“这片鱼塘被我承包了”。

 

如图,鱼塘的形状为两部分(红色线条与蓝色线条所围成的部分),上半部分为开口向下的抛物线,对称轴为Y轴,抛物线与X轴的交点为ABAB关于Y轴对称)。下半部分为一个以线段AB为直径,以原点为圆心的一个半圆。

 飞花的鱼塘(积分求面积咯~)

飞花的鱼塘(积分求面积咯~)飞花壕买承包了这块鱼塘,可是他不知道鱼塘的面积有多大,你能帮他么?

Input

 多组输入。对于每组输入,有两行,第一行为两个浮点数,为P点的坐标PxPy

第二行有2个浮点数,为B点的坐标,BxBy。(所有坐标的取值均小于1000)。

保证输入数据合法。

Output

 

输出鱼塘的面积S 。结果保留两位小数。

Sample Input

0.0 4.5
3.0 0.0
0.0 10.0
5.0 0.0

Sample Output

32.14
105.94

Hint

 

π3.141592654即可


思路:上半部分的面积是用积分求,第一象限的面积x2即可,下半部分的面积s2就是以O为圆心以OB为半径的圆面积的一半,总面积s=s1+s2。这里hint一下上半部分要先求二次函数,A,B,P三点带入y=ax2+bx+c,解一下方程,你就会惊奇的发现,wow,b=0耶~~然后顺手将a和c也用已知点坐标表示出来,就得到了该二次函数表达式。After that,求0到B上积分就KO了。


--------------------------------------------emmm又到了放代码的时刻啦!求关注求关注~----------------------------------------------------------------

#include<bits/stdc++.h>
int main()
{
    double s,s1,s2,x1,x2,y1,y2,z=3.141592654;
    while(scanf("%lf%lf",&x1,&y1)!=EOF){
         scanf("%lf%lf",&x2,&y2);
         s2=0.5*z*x2*x2;
         s1=2*x2*x2*x2*(y1-y2)/(3*(x1*x1-x2*x2));
         s1+=2*x2*(y1-(y1-y2)*x1*x1/(x1*x1-x2*x2));
         s=s1+s2;
         printf("%.2lf\n",s);
    }
    return 0;
}


没戳就这么短。。。让计算机去算好了。。。。。


求关注求关注~~

欢迎访问https://blog.csdn.net/lxt_Lucia~~