如何判断相交!!!新手求教

whowho 2003-04-01 12:06:00
以知道线段1A(X1,Y1)-》 B(X2,Y2);
线段2 C(X1,Y1)-》D(X2,Y2)
如何用程序判断线段1和线段2相交!!!!!!!!!!并取得相交的POINT
...全文
117 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Jinglihui 2003-04-01
再加上Xc<=Xe<=Xd并且Yc<=Ye<=Yd
这个条件必须同时成立才行

--------------------抛砖引玉-----------------------------
  • 打赏
  • 举报
回复
Jinglihui 2003-04-01
先写出两条线段l1,l2所在的直线方程f1,f2
一,先算出这两条线段各自的斜率K1,k2
if (k1==k2)
{
平行或重合
再用l1的一个端点代入f2,如果成立,则重合
}else
{
求出f1与f2的交点e(Xe,Ye),用e的横纵坐标分别与a(Xa,Ya),b(Xb,Yb)和c(Xc,Yc),d(Xd,Yd)比较
if(Xa<=Xe<=Xb并且Ya<=Ye<=Yb)必相交
}

--------------------抛砖引玉-----------------------------
  • 打赏
  • 举报
回复
betapengbo 2003-04-01
什么是A*算法
  • 打赏
  • 举报
回复
greening 2003-04-01
还有一点忘了:如果两个斜率相等(当然我只说斜率存在的情况下),也不能说明他们就一定是不相交。因为若这两条线段在同一直线上,则他们可能相交(即部分或者完全重合),也可能不相交(即直线上不重合的两段)。
  • 打赏
  • 举报
回复
greening 2003-04-01
谢谢楼上提醒,我看题不仔细,惭愧。
我有一个方法,不知道可不可以。
还是先看平不平行(计算AB的斜率和CD的斜率)。
如果不平行的话,就说明“直线”是相交的。
将两条线段延长,求出交点E。然后任意取一条线段,比如AB。

if((Ex<Ax&&Ex<Bx)||(Ex>Ax&&Ex>Bx))

/*用Ey,Ay,By也可以,说明的是交点E在AB的一边 即 说明AB和CD不相交否则说明交点E在AB之间,即说明两条线段相交*/
  • 打赏
  • 举报
回复
先判断斜率,相同不相交
在计算交点,同时在两条直线上相交,否则不相交。
  • 打赏
  • 举报
回复
jamesfangjing 2003-04-01
楼上说得不对!
人家是问线段相交,而不是直线相交,直线可以无限延长,线段则不行!
所以有时不平行,但是也不相交!
我认为可以用线段两点坐标求出方程,然后联立求解,得到直线的相交点,最后看这个点在不在线段上就行了!
我思故我在!
  • 打赏
  • 举报
回复
greening 2003-04-01
我只讲数学方法而已。
二维的前提下,不平行就相交。
先判断无斜率的特殊情况。
计算AB的斜率和CD的斜率,相等就说明是平行的,反之就是相交的。
在已知相交的情况下,设一个点E,列方程使AE和BE的斜率相同,CE和DE的斜率相同(在有斜率的前提下),即可求出E点。
  • 打赏
  • 举报
回复
发帖
C语言

6.6w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
帖子事件
创建了帖子
2003-04-01 12:06
社区公告
暂无公告