如何判断两条线段平行、相交还是有重叠部分

dreamhunter_lan 2011-10-17 10:39:09
函数如下声明:
intersection(int s1[], int s2[])
s1与s2分别是长度为4的整型数组,格式是x1, y1, x2, y2,也就是始末两个点(x1, y1)、(x2, y2)

两条线段只可能是平行于x轴或者平行于y轴,位置关系实在是太多了,如何判断?
...全文
3049 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangzhe10 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 superdullwolf 的回复:]

叉积

回复内容太短了!
[/Quote]
正解
超级大笨狼 2011-11-02
  • 打赏
  • 举报
回复
叉积

回复内容太短了!
zhoujk 2011-11-01
  • 打赏
  • 举报
回复
线a (ax1,ay1),(ax2,ay2)
线b (bx1,by1),(bx2,by2)
用一个很麻烦但是直观的方法来算:
1.判断是否平行:
如果ax1 - ax2 == 0,则线 a 平行于 Y 轴,否则平行于 X 轴
对线 b 进行同样的算法,如果两线同时平等于某个轴,则可视为平行。
2.如果两线平行,则判断是否有重合,如果平行轴之外的另一轴的坐标不等,则可判断无重合
否则,判断其中一条线段的每个点是否位于另一个线段之中,如果是,则可判断为重合。
3.相交:如果其中一条线段的某个坐标值位于另一个线段的该坐标两值之间,反之亦然,则可视为相交。
warren258 2011-10-22
  • 打赏
  • 举报
回复
题目说线段平行x轴或者y轴是不是就是说只有x=* 和y=* 这两种形式,也就是说其中x,y的系数一个必定为0?
showjim 2011-10-22
  • 打赏
  • 举报
回复
这个关系不多吧,也就是三层if else而已
alweeq86 2011-10-21
  • 打赏
  • 举报
回复
线性代数
深度抽象 2011-10-17
  • 打赏
  • 举报
回复
是 叉积 的应用
cnmhx 2011-10-17
  • 打赏
  • 举报
回复
建立两个直线方程;立即可知其和xy轴的关系。
联立求解;无解/唯一解/多解。
dreamhunter_lan 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhang20072844 的回复:]
线段所在的直线用ax+by=c一般式进行表示。
设a1,b1,c1和a2,b2,c2来表示两条直线

如果a2*b1==a1*b2就是平行,判断c1和c2是否相等,如果不等就是不重合。如果相等就是重合,那么判断端点是否在另外一条线段上即可。


如果a2*b1!=a1*b2那么就是相交,解二元一次方程组,很简单吧。然后判断交点是否在两条线段上。在就交,不在就是不想交。

如何判断点……
[/Quote]
面试官说不用方程那么麻烦,因为线段垂直于x轴或者y轴~~当时分情况说了一下,还是太多情况了,被鄙视了
AndyZhang 2011-10-17
  • 打赏
  • 举报
回复
线段所在的直线用ax+by=c一般式进行表示。
设a1,b1,c1和a2,b2,c2来表示两条直线

如果a2*b1==a1*b2就是平行,判断c1和c2是否相等,如果不等就是不重合。如果相等就是重合,那么判断端点是否在另外一条线段上即可。


如果a2*b1!=a1*b2那么就是相交,解二元一次方程组,很简单吧。然后判断交点是否在两条线段上。在就交,不在就是不想交。

如何判断点是否在线段上,这个很简单吧。

如何求a1,b1,c1和a2,b2,c2,这个根据两个端点很简单吧,如果是垂直x轴的,那么b=0.如果是平行x轴,那么a=0.

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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