您的位置:首页 > 其它

判断两直线是否相交 hdu1086

2015-10-01 10:14 169 查看
#include <iostream>
#include <cstdio>

using namespace std;

struct line
{
double x1;
double y1;
double x2;
double y2;
}l[110];

bool test(int i,int j)
{
int s=0;
double acd = (l[j].x1-l[i].x1)*(l[j].y1-l[j].y2) - (l[j].x1-l[j].x2)*(l[j].y1-l[i].y1);
double bcd = (l[j].x1-l[i].x2)*(l[j].y1-l[j].y2) - (l[j].x1-l[j].x2)*(l[j].y1-l[i].y2);
if(acd*bcd<=0)
s++;
double abd = (l[i].x1-l[j].x1)*(l[i].y1-l[i].y2) - (l[i].x1-l[i].x2)*(l[i].y1-l[j].y1);
double abc = (l[i].x1-l[j].x2)*(l[i].y1-l[i].y2) - (l[i].x1-l[i].x2)*(l[i].y1-l[j].y2);
if(abd*abc<=0)
s++;
if(s==2)
return true;
return false;
}

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
for(int i=0;i<n;i++)
{
scanf("%lf%lf%lf%lf",&l[i].x1,&l[i].y1,&l[i].x2,&l[i].y2);
}
int ans=0;
for(int i=0;i<n-1;i++)
{
for(int t=i+1;t<n;t++)
{
if(test(i,t))
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: