求多条线段相交(暴力了点)

原创 2012年03月26日 12:24:58





#include<stdio.h>
#include<math.h>
struct point 
{
	double x,y;
};
struct line
{
	point a,b;
}g[120];
double MAX(double a,double b)
{
	return a>b?a:b;
}
double MIN(double a,double b)
{
	return a<b?a:b;
}
double cross_segment(point a,point b,point c)
{
	return (c.x-a.x)*(b.y-a.y)-(b.x-a.x)*(c.y-a.y); 
}
int onsegment(point a,point b,point c)
{
	double d1=MIN(a.x,b.x);
	double d2=MAX(a.x,b.x);
	double d3=MIN(a.y,b.y);
	double d4=MAX(a.y,b.y);
	if(d1<=c.x&&d2>=c.x&&d3<=c.y&&d4>=c.y)
	return 1;
	return 0;
}
int segments(line a,line b)
{
	double d1=cross_segment(b.a,b.b,a.a);
	double d2=cross_segment(b.a,b.b,a.b);
	double d3=cross_segment(a.a,a.b,b.a);
	double d4=cross_segment(a.a,a.b,b.b);
	if(((d1>0&&d2<0)||(d1<0&&d2>0))&&((d3>0&&d4<0)||(d3<0&&d4>0)))
	return 1;
	else if(d1==0&&onsegment(b.a,b.b,a.a))
	return 1;
	else if(d2==0&&onsegment(b.a,b.b,a.b))
	return 1;
	else if(d3==0&&onsegment(a.a,a.b,b.a))
	return 1;
	else if(d4==0&&onsegment(a.a,a.b,b.b))
	return 1;
	else
	return 0;
}

int main()
{
	int i,j,k,m,n,ncase,sum;
	while(scanf("%d",&m),m)
	{
		
		for(i=0;i<m;i++)
		scanf("%lf%lf%lf%lf",&g[i].a.x,&g[i].a.y,&g[i].b.x,&g[i].b.y);
		sum=0;
		if(m==1)
		{
			printf("0\n");
			continue;
		}
		for(i=0;i<m;i++)
		{
			for(j=i+1;j<m;j++)
			{
				if(segments(g[i],g[j]))
				sum++;
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

判断线段相交和求交点

  • 2008-05-23 01:19
  • 42KB
  • 下载

hdu 1086 You can Solve a Geometry Problem too(求线段相交点个数 模板)

hdu 1086 You can Solve a Geometry Problem too(求线段相交点个数 模板)

uva 303 pipe (求线段交点,判断线段相交)

这题并不难,但我却弄了一天。 只要枚举每个上面的点与下面的点的连线,在看这条线能到达的最远的地方。 然后如果这条线与上面或下面的第i条斜线线相交的话,必然会相交与up[i]-down[i]这条垂线...

判断两线段是否相交

  • 2011-12-18 20:18
  • 36KB
  • 下载

poj 3304(利用叉积求是否存在直线与所给线段相交)

【题目大意】:给出n条线段,问你是否存在一条直线,使得每个线段与该直线至少有一个交点。 【解题思路】:没有思路,没有思路,还是没有思路。然后开始无止境的yy。 因为点的个数比较小,感觉n^3可以...
  • wlyqh
  • wlyqh
  • 2011-10-27 00:38
  • 467

POJ 1066 Treasure Hunt 判断线段相交(求交点个数)

Treasure Hunt Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4875   Accepted: 20...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)