在電影裡面,我們經常可以看到武士們拔出刀,然後一刀斬下去,結果………………………………一張紙片被砍成了兩半,囧…………
而在本題中,我們需要計算一下被斬下去較小的那一部分的面積。
我們假設紙片是矩形的,平行於坐標軸的,武士砍紙片的軌跡是一條直線。
第一行一個整數N(2<=N<=350),表示數據組數。
接下來一行,每行7個整數,xl,yl,xr,yr,a,b,c ,表分別表示矩形左下角坐標(xl,yl),右上角坐標(xr,yr),以及軌跡方程ax+by+c=0。整數的絕對值均小於200。
對於每一組數據,輸出一個三位小數,表示砍後較小那部分的面積。數據保證這個面積大於0.001。
3 1 1 3 3 -1 1 0 1 1 3 4 -1 1 0 1 2 3 4 -1 1 0
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<