| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
无语了!@检查了n遍了,还是WA!!#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
double square(double x1,double y1, double x2,double y2,double x3,double y3);
int main()
{int n;
int x1,x2,x3,x4,y1,y2,y3,y4;
double x5;
double tmp,tmp1,tmp2;
double x,y;
double sum=0;
cin>>n;
while(n--)
{
cin>>x1>>y1>>x2>>y2
>>x3>>y3>>x4>>y4;
if(y1>y2)
{swap(y1,y2);
swap(x1,x2);
}
if(y3>y4)
{swap(y3,y4);
swap(x3,x4);
}
if(((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1))==0||y1==y2||y3==y4)//平行或有一个水平输出0。
{printf("%.2f\n",0);
continue;
}
tmp=(y2-y1)*(x3-x4)-(y4-y3)*(x1-x2);
tmp1=(x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-x4*y3);
tmp2=(y2-y1)*(x3*y4-x4*y3)-(y4-y3)*(x1*y2-y1*x2);
x=tmp1/tmp;
y=tmp2/tmp;//求出直线交点
if((x-x1)*(x-x2)>0.0001||(y-y1)*(y-y2)>0.0001)//判断点是否在线段上
{printf("%.2f\n",0);
continue;
}
if((x-x3)*(x-x4)>0.0001||(y-y3)*(y-y4)>0.0001)//判断点是否在线段上
{printf("%.2f\n",0);
continue;
}
if(y4>=y2)//求面积
{x5=(double)((x3*y4-x4*y3)+y2*(x4-x3))/(y4-y3);
sum=square(x5,y2,x,y,x2,y2);
}
else//求面积
{x5=(double)((x1*y2-y1*x2)+y4*(x2-x1))/(y2-y1);
sum=square(x5,y4,x,y,x4,y4);
}
printf("%.2f\n",sum);
}
return 0;}
double square(double x1,double y1, double x2,double y2,double x3,double y3)//3点法求面积
{
double cur;
cur=(x1*y2+x3*y1+x2*y3-x3*y2-x2*y1-x1*y3)/2;
if(cur<-0.0001)
cur=-cur;
return cur;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator