HDU-OJ The area
阿新 • • 發佈:2018-12-16
問題描述 伊格納修斯上週買了一塊土地,但他不知道這塊土地的面積,因為土地被拋物線和一條直線包圍著。下圖顯示了該區域。現在考慮到圖片中顯示的所有交叉點,你能告訴Ignatius這片土地的面積嗎?注意:圖中的點P1是拋物線的頂點。
|
輸入 輸入包含幾個測試用例。輸入的第一行是單個整數T,它是測試用例的數量。T測試案例如下。
|
產量 對於每個測試用例,您應該輸出土地面積,結果應四捨五入到小數點後兩位。
|
樣本輸入 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 暗示 對於浮動可能不夠準確,請使用double而不是float。 |
#include<cstdio> #include<cstdlib> int main() { int T; double X0, X1, X2, Y0, Y1, Y2, a, b, c, k, B, m, n; scanf_s("%d", &T); while(T--) { scanf_s("%lf%lf%lf%lf%lf%lf", &X0, &Y0, &X1, &Y1, &X2, &Y2); a = (Y0 - Y1) / ((X0 - X1)*(X0 - X2)) - (Y1 - Y2) / ((X1 - X2)*(X0 - X2)); b = (Y0 - Y1) / (X0 - X1) - ((X0 + X1)*(Y0 - Y1)) / ((X0 - X1)*(X0 - X2)) + (X0 + X1)*(Y1 - Y2) / ((X1 - X2)*(X0 - X2)); c = Y0 - a * X0*X0 - b*X0; k = (Y1 - Y2) / (X1 - X2); B = Y1 - k * X1; m = 1 / 3.0*a*X1*X1*X1 + 0.5*b*X1*X1 + c * X1 - 0.5*k*X1*X1 - B * X1; n= 1 / 3.0*a*X2*X2*X2 + 0.5*b*X2*X2 + c * X2 - 0.5*k*X2*X2 - B * X2; printf("%.2lf\n", n - m); } system("pause"); return 0; }