怎样快速判断两直线段是否部分重叠,如果重叠怎样决定方向是否一致?

cloudrain 2004-09-11 02:57:16
如题,现已知直线段1的端点A-B;直线段2的端点C-D.不用求交怎样才能判断它们部分(含全部重叠)重叠,如果部分重叠那重叠部分与原直线1方向是否一致.
...全文
773 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
syy64 2004-09-13
  • 打赏
  • 举报
回复
如果两直线置平后,每一条线,两相邻点的y都等于0,且x坐标有交叉,则有重叠。
subtop 2004-09-12
  • 打赏
  • 举报
回复
如果你对速度要求很高的话,第二个方法的浮点乘可以改为判断,判断两个乘数是否符号相反,如果其中一个为0,就可以认为与另一个乘数符号相反.
subtop 2004-09-12
  • 打赏
  • 举报
回复
如果你只判断是否相交(不区分平行且部分重合与相交一点这两种情况),你可以采用第二种方法,如果还要区分交叉与平行且部分重合,你就要先用第二种方法,满足第二个条件的同时再满足第一个条件,那就是平行且部分重合,否则只满足第一个条件就是交叉.
cloudrain 2004-09-11
  • 打赏
  • 举报
回复
谢谢subtop(风歌)
这样就可避开只有一个交点的情况了吗?
subtop 2004-09-11
  • 打赏
  • 举报
回复
有一个交点,你可以这样,假设A-B决定的直线方程为f1(x,y)=0,C-D决定的直线方程为f2(x,y)=0;
线段A-B与C-D有交点<<==>>
f1(ptC.x,ptC.y)*f1(ptD.x,ptD.y)<=0&&f2(ptA.x,ptA.y)*f2(ptB.x,ptB.y)<=0
如果只判断是否有交点(不判断是否平行)这个判断可以函盖上面的算法.至于方向,很简单,判断deltaX,deltaY的增减是否一致就可以了.
cloudrain 2004-09-11
  • 打赏
  • 举报
回复
哎 只有自己mark啦
cloudrain 2004-09-11
  • 打赏
  • 举报
回复
楼上的 那只有一个交点(不能算是重叠)的情况怎么解决啊?另外可以说详细点吗?
syy64 2004-09-11
  • 打赏
  • 举报
回复
坐标变换,将直线置平,新坐标系中,如果Y都等于0,表示重叠。
cloudrain 2004-09-11
  • 打赏
  • 举报
回复
偶用的是C++坐标全部用的是实际浮点坐标,也不是判断相交。是要看它们是否有部分重叠(不含一个交点的情况)
Kudeet 2004-09-11
  • 打赏
  • 举报
回复
比较直线也当矩形比较
判断两个矩形是否相交,他们是由两点(左上/右下)决定,使用屏幕坐标系
矩形 A (x1,y1),(x2,y2);
矩形 B (x3,y3),(x4,y4);
设 m= (x1>x4)|(x2<x3)
n= (y2<y3)|(y1>y4)
if(m|n)
{
//不相交
}
else
{
//相交
}
cloudrain 2004-09-11
  • 打赏
  • 举报
回复
呵呵 楼上的不好意思偶用的是一般的c++
phineco 2004-09-11
  • 打赏
  • 举报
回复
为两直线生成两个矩形RECT,再用函数求intersectRect求两个矩形的相交
是否为空,方向的话就是比较直线的两点的坐标就行了
cloudrain 2004-09-11
  • 打赏
  • 举报
回复
还有个问题就是两直线段只有一个交点,这种情况是不能作为重叠处理的。这个算法考虑了吗?比如D和A重叠后就反向分开了,又要怎样处理啊
cloudrain 2004-09-11
  • 打赏
  • 举报
回复
谢谢,这个方向就是直线段1与直线段2是否同向。
subtop 2004-09-11
  • 打赏
  • 举报
回复
假定四点分别为:CPoint ptA,ptB,ptC,ptD;
//先判断是否平行
if(((ptA.y-ptB.y)*(ptC.x-ptD.x)-(ptA.x-ptB.x)*(ptC.y-ptD.y))==0)//平行
{
if(((ptA.y-ptC.y)*(ptA.x-ptB.x) - (ptA.y-ptB.y)(ptA.x-ptC.x))==0||
   ((ptA.y-ptD.y)*(ptA.x-ptB.x) - (ptA.y-ptB.y)(ptA.x-ptD.x))==0))//重合
{
//重叠部分方向?
//我不是很明白
}
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧