XYNUOJ 1732 計算面積

 計算面積

時間限制: 1 Sec  內存限制: 32 MB
提交: 5  解決: 4
您該題的狀態:已完成
[提交][狀態][討論版]

題目描述

小明家剛買了一塊地,但是他不知道這塊地的面積,因爲這塊地是由一條拋物線和一條直線圍成的。下面的圖片展示了這塊地的形狀。

現在給你拋物線的頂點座標和拋物線與直線的交點座標,請你計算這塊地的面積。

輸入

輸入的第一行是一個整數t,表示有t組測試數據。
每組輸入包含三行,第一行輸入P1點的座標,第二行輸入P2點的座標,第三行輸入P3點的座標。
每個點的座標由兩個浮點數x和y構成。(0.0<=x,y<=1000.0)
題目保證輸入中不會出現兩點和三點重合的情況。

輸出

對於每組輸入,請輸出這塊地的面積,結果保留兩位小數。

樣例輸入

2
5.000000 5.000000
0.000000 0.000000
10.000000 0.000000
10.000000 10.000000
1.000000 1.000000
14.000000 8.222222

樣例輸出

33.33
40.69

題目分析:知其然,不知其所然

代碼如下:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

int main()
{
    int t;
    float xp1,xp2,xp3,yp1,yp2,yp3;      //不知道爲啥改double 不行 
    double a,k,b,s;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lf%lf%lf%lf%lf%lf",&xp1,&yp1,&xp2,&yp2,&xp3,&yp3);
        a=(yp2-yp1)/(xp2-xp1)/(xp2-xp1);
        k=(yp2-yp3)/(xp2-xp3);
        b=yp2-(yp2-yp3)/(xp2-xp3)*xp2;
        s=a/3*xp3*xp3*xp3+(-2*a*xp1)/2*xp3*xp3+(a*xp1*xp1+yp1)*xp3-k/2*xp3*xp3-b*xp3-(a/3*xp2*xp2*xp2+(-2*a*xp1)/2*xp2*xp2+(a*xp1*xp1+yp1)*xp2-k/2*xp2*xp2-b*xp2);
        printf("%.2lf\n",s);
    }
    return 0;
}

發佈了189 篇原創文章 · 獲贊 77 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章