有一组用如下结构体表示的线段,求每条线段和几条线段相交

来源:百度知道 编辑:UC知道 时间:2024/06/01 03:26:22
struct line
{
int startx;
int starty;
int endx;
int endy;
}

line theLine[32];

判断线段相交主要方法为求叉积
叉积可以判断点在直线的顺时针方向还是逆时针方向
如果一个点在顺时针方向,另一个在逆时针方向,哪么我们说两条线段相交
具体的刘汝佳的黑书上面有

给个模板:
先定义一个直线的结构体:
typedef struct line
{
float x1 , x2 , y1 , y2 ;
}LINE ;

bool intersect(LINE l1,LINE l2)
{
......
}

---------------------------------------------------------------


dx1=L1.x2-L1.x1, dy1=L1.y2-L1.y1
dx2=L2.x2-L2.x1, dy2=L2.y2-L2.y1

则向量积
(dx1,dy1)x(dx2,dy2)=0
时2直线不相交,否则,作为无穷直线,必相交

但交点可以不落在2个直线段内,而在它们1个或2个直线段外,
所以要进一步判别交点同时落在2个直线段内,
为此可以:考察L1在L2上投影是否与L2重叠,L2在L1上投影是否与L1重叠,如果二者皆是,才能肯定L1,L2相交, 否则仍未不相交.

---------------------------------------------------------------

class POINT
{
public:
double x,y;
};

class LINESEG
{
public:
POINT s,e;
}
l[2000];

double max(double a,double b)
{
return a>b?a:b