社区
数据结构与算法
帖子详情
判断同一平面上的任意两条线段是否相交,大家有什么好的算法?
greenteanet
2006-03-25 03:25:05
判断同一平面上的任意两条线段是否相交,大家有什么好的算法?
...全文
1013
11
打赏
收藏
判断同一平面上的任意两条线段是否相交,大家有什么好的算法?
判断同一平面上的任意两条线段是否相交,大家有什么好的算法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
phoenixinter
2006-04-07
打赏
举报
回复
CrossProduct
qinyuanfeng
2006-04-07
打赏
举报
回复
很厉害——学习中……
寻开心
2006-04-07
打赏
举报
回复
只判断是否相交,应该用跨立试验方法为好,计算量最小,只是+-*,没有/ 速度最快
tansoul
2006-04-07
打赏
举报
回复
/*
1)快速排斥试验
设以线段 P1P2 为对角线的矩形为R,
设以线段 Q1Q2为对角线的矩形为T,
如果R和T不相交,显然两线段不会相交。
--
明显不对,如果R和T相交,两线段即不一定相交.
我觉得楼主想多了,这种情况还是像zzwu(未名) 那样用方程,即初中数学的方法最快,最好.
楼上误解别人了吧,人家说如果R,T不相交可以得到线段不相交,并没有说R,T相交,线段就相交吧!
iamwiner
2006-04-01
打赏
举报
回复
/*
1)快速排斥试验
设以线段 P1P2 为对角线的矩形为R,
设以线段 Q1Q2为对角线的矩形为T,
如果R和T不相交,显然两线段不会相交。
--
明显不对,如果R和T相交,两线段即不一定相交.
我觉得楼主想多了,这种情况还是像zzwu(未名) 那样用方程,即初中数学的方法最快,最好.
greenteanet
2006-03-28
打赏
举报
回复
自己up一下.
Kvci
2006-03-28
打赏
举报
回复
1. 用参数方程表示2线段,记住x、y坐标域
2. 求包含2线段的2直线的交点t.
3、判断t是否同时在两x、y坐标域内
zzwu
2006-03-28
打赏
举报
回复
1. 用参数方程表示2线段,
2. 求包含2线段的2直线的交点t.
3. 如果交点落在2线段中,当且仅当t在[0,1]间
syy64
2006-03-28
打赏
举报
回复
// Á½ÌõÆ½ÃæÏß¶ÎÇ󽻵㡣 2006.3.9.
// pt1,pt2---¡µµÚÒ»ÌõÏß¶ÎÁ½¶ËµãµÄ×ø±ê£»
// pt3,pt4---¡µµÚ¶þÌõÏß¶ÎÁ½¶ËµãµÄ×ø±ê£»
// pt5---¡µ·µ»ØµÄ½»µã×ø±ê¡£
// º¯Êý·µ»ØÖµÎªTrue±íʾÓн»µã£¬false±íʾÎÞ½»µã¡£
bool GetIntersectForTwoLine(CPoint3D pt1, CPoint3D pt2, CPoint3D pt3, CPoint3D pt4, CPoint3D& pt5)
{
bool bBeeline(false);
double dAngle, ss, ss1, dkk, dbb, dValue(0.0001);
CPoint3D pt6, pt7, pt8, pt9, pt10;
pt6 = pt2-pt1;
ss = sqrt(pt6.x*pt6.x+pt6.y*pt6.y);
dAngle = CalAngle(pt6.x, pt6.y);
dAngle *= PI/180.0;
pt7 = pt3-pt1;
CoordTransformation(pt7.x, pt7.y, dAngle, &pt8.x, &pt8.y);
pt7 = pt4-pt1;
CoordTransformation(pt7.x, pt7.y, dAngle, &pt9.x, &pt9.y);
if(pt8.x<0.0&&pt9.x<0.0)return false;
if(pt8.x>ss&&pt9.x>ss)return false;
if(pt8.y*pt9.y>0)return false;
pt10 = pt9-pt8;
ss1 = sqrt(pt10.x*pt10.x+pt10.y*pt10.y);
bBeeline = BeelineEquation(pt8, pt9, dValue, dkk, dbb);
pt7.y = 0.0;
if(!bBeeline)
pt7.x = pt8.x;
else
pt7.x = -dbb/dkk;
if(pt7.x<0.0||pt7.x>ss)return false;
CoordAntiTransformation(pt7.x, pt7.y, dAngle, &pt5.x, &pt5.y);
pt5 += pt1;
return true;
}
greenteanet
2006-03-25
打赏
举报
回复
楼上的谢谢啦,这个算法我知道。我是想得到另外一些创新点的算法。
jp1984
2006-03-25
打赏
举报
回复
/*
1)快速排斥试验
设以线段 P1P2 为对角线的矩形为R,
设以线段 Q1Q2为对角线的矩形为T,
如果R和T不相交,显然两线段不会相交。
(2)跨立试验
如果两线段相交,则两线段必然相互跨立对方。
若P1P2跨立Q1Q2 ,则矢量 ( P1 - Q1 )
和( P2 - Q1 )位于矢量( Q2 - Q1 ) 的两侧,
即( P1 - Q1 ) × ( Q2 - Q1 ) * ( P2 - Q1 ) × ( Q2 - Q1 ) < 0。
上式可改写成( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) > 0。
当 ( P1 - Q1 ) × ( Q2 - Q1 ) = 0 时,说明 ( P1 - Q1 ) 和 ( Q2 - Q1 )共线,
但是因为已经通过快速排斥试验,所以 P1 一定在线段 Q1Q2上;
同理,( Q2 - Q1 ) ×(P2 - Q1 ) = 0 说明 P2 一定在线段 Q1Q2上。
所以判断P1P2跨立Q1Q2的依据是:
( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) >= 0。
同理判断Q1Q2跨立P1P2的依据是:
( Q1 - P1 ) × ( P2 - P1 ) * ( P2 - P1 ) × ( Q2 - P1 ) >= 0。
*/
判断
平面
上
任意
两条
线段
是否
相交
-Python实现
本文介绍了一种
判断
二维
平面
上
两条
线段
是否
相交
的
算法
。首先通过快速排斥法排除明显不
相交
的情况,接着利用跨立实验进一步
判断
线段
是否
实际
相交
。提供了Python实现代码。
关于如何
判断
在
平面
上的
两条
线段
是否
相交
博客围绕面试时被问到的
平面
上
两条
线段
是否
相交
的问题展开。介绍了两种解决方法,传统
判断
是先求直线交点,再
判断
交点
是否
在
线段
上;
算法
2是通过将
线段
端点代入另一条
线段
直线方程,根据结果符号
判断
,编程实现相对简单,还给出了主要
算法
代码。
判断
两条
线段
是否
相交
(C++)
本文详细介绍了如何
判断
两条
线段
是否
相交
的
算法
,包括快速排斥计算和跨立计算两个步骤。通过向量叉乘
判断
线段
是否
位于彼此两侧,并提供C++代码实现。
如何
判断
2个
线段
相交
本文介绍了两种
判断
线段
是否
相交
的方法:直接计算交点和利用向量叉积。重点讲解了基于向量叉积的
算法
,包括快速排斥实验和跨立实验,并提供了具体的代码实现。
判断
平面
上
两条
直线
是否
相交
本文介绍了计算几何中的一个问题,如何
判断
平面
上的
两条
直线
是否
相交
。通过向量叉积和
判断
点在直线上的条件,给出了一个
算法
实现。包括主函数SegmentIntersect,用于检查四点
是否
构成
相交
线段
,并提供了简单的输入输出示例。
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章