判断线段相交

原创 2012年03月26日 12:02:30


#include<stdio.h>
#include<math.h>
double MAX(double a,double b)
{
	return a>b?a:b;
}
double MIN(double a,double b)
{
	return a<b?a:b;
}

struct point 
{
	double x,y;
};
double dirction(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(point a,point b,point c,point d)
{
	double d1=dirction(c,d,a);
	double d2=dirction(c,d,b);
	double d3=dirction(a,b,c);
	double d4=dirction(a,b,d);
	if(((d1>0&&d2<0)||(d1<0&&d2>0))&&((d3>0&&d4<0)||(d3<0&&d4>0)))
	return 1;
	else if(d1==0&&onsegment(c,d,a))
	return 1;
	else if(d2==0&&onsegment(c,d,b))
	return 1;
	else if(d3==0&&onsegment(a,b,c))
	return 1;
	else if(d4==0&&onsegment(a,b,d))
	return 1;
	return 0;
}
int main()
{
	int i,m,k,j,n,ncase;
	point a,b,c,d;
	scanf("%d",&ncase);
	while(ncase--)
	{
		scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
		scanf("%lf%lf%lf%lf",&c.x,&c.y,&d.x,&d.y);
		if(segments(a,b,c,d))
		printf("YES\n");
		else
		printf("NO\n");
	}
	return 0;
}


计算几何之判断线段相交

链接:http://blog.csdn.net/chenbang110/article/details/7742535 /* (A1-B1) × (B2-B1) * (B2-B1) ×...
  • migu77777
  • migu77777
  • 2016年08月11日 11:26
  • 357

POJ 3304 Segments (计算几何、判断直线与线段是否相交)

题目链接:http://poj.org/problem?id=3304 题意: 3 2 1.0 2.0 3.0 4.0 4.0 5.0 6.0 7.0 3 0.0 0.0 0.0...
  • Strokess
  • Strokess
  • 2016年08月22日 19:14
  • 400

计算几何基础——矢量和叉积 && 叉积、线段相交判断、凸包(转载)

转载自 http://www.cnblogs.com/bfshm/articles/3620500.html 矢量       如果一条线段的端点是有次序之分的话,那么这种线段就称为 有向线段,如...
  • itismelzp
  • itismelzp
  • 2015年10月27日 17:11
  • 1440

计算几何----判断线段相交(一)

判断线段相交: 两个线段的交点个数可能有0个 1个或者无数个 判断两个线段相交,可以按照如下步骤: 判断A点B点是否在线段CD的两侧,即计算叉积时异号 判断C点和D点是否在线段AB的两侧,即...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016年04月07日 22:54
  • 1141

判断线段相交

#include iostream>using namespace std;template class T>T Direction (T x1, T y1, T x2, T y2, T x3, T ...
  • Rappy
  • Rappy
  • 2007年10月14日 03:27
  • 1498

判断线段相交 opencv-ext

判断线段相交 opencv-ext2010-07-18 17:15http://opencv-extension-library.googlecode.com/svn/trunk/qtcvxlib/c...
  • zhanghefu
  • zhanghefu
  • 2010年12月14日 22:45
  • 1731

【算法导论】33.2:判断任意两条线段是否相交

1.基本方法:扫描线法(sweeping),垂直扫描线,只是可以判断是否相交,而不能打印交点。扫描线自左向右,x轴看作是时间,两个假设:(1)没有垂直的线段(2)没有三条线段交与一点。2.如果不相交,...
  • QIBAOYUAN
  • QIBAOYUAN
  • 2010年08月30日 15:52
  • 1969

POJ - 1127 Jack Straws 判断线段相交 叉积

题目链接 感谢大佬! 感谢大佬! 判断两线段是否相交: 快速排斥跨立实验(这两个词也是我看博客的时候看到的,觉得挺高大上的就拿过来用了,哈哈哈)   快速排斥:就是初步的判断...
  • HowardEmily
  • HowardEmily
  • 2017年07月19日 21:28
  • 672

怎样判断线段相交

一.矢量基本知识     因为后面的计算需要一些矢量的基本知识,这里只是简单的列举如下,如果需要更加详细的信息,可以自行搜索wikipedia或google。 1.矢量的概念:如果一条线段的端点是...
  • Shine_Y
  • Shine_Y
  • 2012年04月13日 14:14
  • 305

判断线段相交,凸包

判断线段相交  #include #include using namespace std; typedef struct dotnode{ double x; double y; }dot...
  • ZJU_fish1996
  • ZJU_fish1996
  • 2016年03月11日 11:11
  • 457
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断线段相交
举报原因:
原因补充:

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