社区
数据结构与算法
帖子详情
判断同一平面上的任意两条线段是否相交,大家有什么好的算法?
greenteanet
2006-03-25 03:25:05
判断同一平面上的任意两条线段是否相交,大家有什么好的算法?
...全文
924
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。
*/
直线射线
线段
三角形求交代码
直线、射线、
线段
求交;
平面
三角形求交,空间三角形求交的代码,可以用在C++上。
2020年中考数学考点总动员第14讲
线段
角
相交
线和平行线含解析202004082135
2020年中考数学考点总动员第14讲
线段
角
相交
线和平行线含解析202004082135
2019年中考数学复习知识点梳理归纳几何部分第一章
线段
角
相交
线平行线
2019年中考数学复习知识点梳理归纳几何部分第一章
线段
角
相交
线平行线
2015年春七年级数学下册 4.1.1
相交
与平行课时作业 (新版)湘教版
2015年春七年级数学下册 4.1.1
相交
与平行课时作业 (新版)湘教版
人教中职数学
平面
与
平面
的平行关系PPT课件.pptx
人教中职数学
平面
与
平面
的平行关系PPT课件.pptx
数据结构与算法
33,025
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章