程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> BNU 斬(超級大水題)

BNU 斬(超級大水題)

編輯:C++入門知識

BNU 斬(超級大水題)


L. 斬

Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Main Submit Status PID: 29379

在電影裡面,我們經常可以看到武士們拔出刀,然後一刀斬下去,結果………………………………一張紙片被砍成了兩半,囧…………

而在本題中,我們需要計算一下被斬下去較小的那一部分的面積。

我們假設紙片是矩形的,平行於坐標軸的,武士砍紙片的軌跡是一條直線。

Input

第一行一個整數N(2<=N<=350),表示數據組數。

接下來一行,每行7個整數,xl,yl,xr,yr,a,b,c ,表分別表示矩形左下角坐標(xl,yl),右上角坐標(xr,yr),以及軌跡方程ax+by+c=0。整數的絕對值均小於200。

Output

對於每一組數據,輸出一個三位小數,表示砍後較小那部分的面積。數據保證這個面積大於0.001。

Sample Input

3
1 1 3 3 -1 1 0
1 1 3 4 -1 1 0
1 2 3 4 -1 1 0

Sample Output

2.000
2.000

0.500 | |

思路:矩形有四條邊 都延伸開---|----------|----------

| |

------|----------|------------

直線ax+by+c=0 與它有四個交點 、

找出四個交點的總哪兩個是在矩形上的就可以算了(當時little yellow想出的方法和這不同 我聽了1個多小時沒懂 就不想寫了)

 

#include
#include
#include
#include
#include
using namespace std;
int t;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        double S,s;
        double x1,y1,x2,y2,a,b,c;
        double Xy1,Xy2,x1Y,x2Y;
        scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
        scanf("%lf%lf%lf",&a,&b,&c);
        Xy1=(c+b*y1)*1.0/-a;//下邊點
        Xy2=(c+b*y2)*1.0/-a;//上邊點
        x1Y=(c+a*x1)*1.0/-b;//左邊點
        x2Y=(c+a*x2)*1.0/-b;//右邊點
       // cout<


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved