您的位置:首页 > 其它

使用叉积判断两条线段是否相交

2015-07-06 15:20 267 查看
来自个人百度空间的文章---2012.2.19

一、基础知识

      求两条线段是否相交首先要求两条线段通过快速排斥实验,即做出能包含两条线段的最小的矩形,既是以两条线段作为对角线的

两个矩形,判断两个矩形是否相交,若两个矩形不能同时在x方向和y方向相交,则两条线段不可能相交,通过了快速排斥实验后再

判断两条线段是否互相跨立,既是一条线段的两个端点是否在另一条线段所在直线的两侧,若满足以上两条,则线段一定相交。

      叉积的正负性不仅具有数字正负性还具有方向性,而点积的正负性只具有数字正负性。

二、c代码(没测试,别人的)

     
typedef struct
{
double x;
double y;
}Coordinate;

typedef struct
{
Coordinate start;
Coordinate end;
}Line;

int main()
{
Line a,b;
Coordinate m,n,p;
double x,y;
bool tag;
cout<<"请输入两条线段的坐标:"<>a.start.x>>a.start.y>>a.end.x>>a.end.y;
cin>>b.start.x>>b.start.y>>b.end.x>>b.end.y;
//先判断两矩形是否在x方向上相交
//若要在x方向上相交,则满足end1.x>start2.x,start1.x=b.start.x&&a.start.x<=b.end.x)
tag=true;
else
tag=false;

if(tag==false)
{
cout<<"两条线段不相交!"<start2.y,start1.y=b.start.y&&a.start.y<=b.end.y)
tag=true;
else
tag=false;

if(tag==false)
{
cout<<"两条线段不相交!"<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: