最近在看任意两个多边形的交并比。
开始自己想办法,花了两天时间,进展比较缓慢。情况越想越多,越来越不可控。于是只有求助与度娘了。虽然还是有些问题,但问题还是慢慢的有些好转,其中一点心青大神的博客中提到的想法和源码,给了我很大启示。
求两条直线的位置关系中, 大神是用的向量的想法,思路很新颖,但是我有点一知半解,c++转的python代码运行也有点问题, 于是我老老实实的在网上补习了一下直线的位置关系, 并用一般表达式做了实现。
其中线段的关系,我分为以下五种:

lines_status = ['coll', 'para','ins', 'coll_on', 'ins_on']
#'coll': 共线, 没有重合
#'para': 平行
#'ins':  所在的直线相交, 没有交点
#'coll_on' 共线,有重合部分, 可能重合的交点或者一段线段
#'ins_on' 所在直线相交, 两个线段有交点
#---------------------------------------
#func: get_2line_status
#info: 获取两条线段的关系
#return: ["condition", [[point1],[point2]]]
#
#   condition:
#       'coll': 共线, 没有重合, 返回直没有point1和point2
#       'para': 平行, 返回直没有point1和point2
#       'ins':  所在的直线相交, 没有交点, 返回直中有延长线的交点point1
#       'coll_on' 共线,有重合部分, 可能重合的交点或者一段线段, 如果只重合了端点,则返回point1, 如果重合一段线段, 则返回直中有point1和point2
#       'ins_on' 所在直线相交, 两个线段有交点,则返回point1
#---------------------------------------
def get_2line_status(line1, line2):x1,y1 = line1[0]x2,y2 = line1[1]x3,y3 = line2[0]x4,y4 = line2[1]# 直线表达式ax +by +c =0a = y2-y1b = x1-x2 c = x2*y1 -x1*y2 # 直线表达式ex +fy +g =0e = y4-y3f = x3-x4 g = x4*y3 -x3*y4 # 斜率相等if b*e == a*f: if c*f == g*b and c*e == g*a: #c/b == g/f(能用乘法就不用除法): # 共线if (x1-x3) == 0 or (x1-x4) == 0: coll_=[[x1,y1]] #共点elif (x1-x3)*(x1-x4) < 0:  #有公共线段coll_= [[x1,y1]]if (x1-x3)*(x1-x2) > 0: coll_.append([x3,y3])else: coll_.append([x4,y4])elif (x2-x3) == 0 or (x2-x4) == 0: coll_=[[x2,y2]] #共点elif (x2-x3)*(x2-x4) < 0: #有公共线段coll_= [[x2,y2]]if (x2-x3)*(x2-x1) > 0: coll_.append([x3,y3])else: coll_.append([x4,y4])else:  return ['coll']return ['coll_on', coll_]else:return ['para']#斜率不等时,计算y轴交点if a != 0 and e != 0:yi = (a*g-e*c)/(b*e-a*f)elif a == 0:yi = -c/b else :yi = -g/f #斜率不等时,计算x轴交点if b != 0 and f != 0:xi = (b*g-f*c)/(a*f-b*e)elif b == 0:xi = -c/a else :xi = -g/e # 判断交点是否在直线上if point_in_segment((xi,yi),line1) \and point_in_segment((xi,yi),line2):return ['ins_on', [[xi,yi]]]else: return ['ins', [[xi,yi]]]

恩恩,开源时代,希望对大家有所帮助。

判断两条直线的位置关系相关推荐

  1. POJ1269:Intersecting Lines(判断两条直线的关系)

    题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...

  2. 判断两条直线是否相交c语言,计算几何-两条线段是否相交(三种算法)

    原标题:计算几何-两条线段是否相交(三种算法) 计算几何中,判断线段是否相交是最基本的题目. 所谓几何, 最基本的当然就是坐标, 从坐标中我们可以知道位置和方向,比如:一个点就是一个位置,两点确定一条 ...

  3. 判断点和直线的位置关系

    ```csharp/// <summary>/// 判断点和直线的位置关系/// </summary>/// <param name="LinePntA&quo ...

  4. C#判断点和直线的位置关系

    /// <summary>/// 判断点和直线的位置关系/// </summary>/// <param name="LinePntA">直线上 ...

  5. 如何判断两条直线是否相交

    之前写过一篇如何判断两条线段是否相交,我们紧接这个主题,再来谈谈如何判断两条直线是否相交 如何判断两条直线是否相交 总体来上,判断直线是否相交比判断线段是否相交容易多了 两条直线相交只有两种情况 第一 ...

  6. 判断两个圆形的位置关系

    自定义方法判断两个圆形的位置关系 用的是cocos引擎,如果没用过我说下实现方法 思路很简单,只要根据两个圆的中心距离和半径比较就可以得出位置关系 // return: -1 不相交 0 正常相交 1 ...

  7. 判断两条直线(线段)的交点问题

    要判断两条直线是否有交点首先要求出两直线的斜率,如果相等级两直线平行的话就肯定没有了,反之就一定有了,就可以联立两条直线的方程(我们假定直线的方程都是可以表示出来的),求出两直线的交点然后结果就有了, ...

  8. matlab 平行,MATLAB判断两条直线平行

    两条直线平行的判据比较简单,只要斜率相等就可以了.但也有特殊情况,比如平行于y轴的直线斜率没有定义. 综合考虑以上情形,就不难将程序写出来,具体如下: 函数 isparallellines.mfunc ...

  9. 判断两条直线是否相交c语言,学习OpenCV3:判断两条直线相交,并计算交点和夹角...

    一.问题 已知两条直线 和 ,现希望判断 与 间是否相交.若相交,计算出两条直线的交点和夹角. 二.分析 1.直线方程 的直线方程: 的直线方程: 提示: 和 不能同时为0.若 和 同时为0,起点和终 ...

  10. 学习OpenCV3:判断两条直线平行,并计算平行距离

    一.问题   已知两条直线 l 1 ( x 1 , y 1 , x 2 , y 2 ) l_1(x_1,y_1,x_2,y_2) l1​(x1​,y1​,x2​,y2​)和 l 2 ( x 3 , y ...

最新文章

  1. 一文探索 JavaScript 最强大特性—函数表达式
  2. 多重循环 ——— 打印九九乘法表 || 经典的打印金字塔(打印整个金字塔 打印空心金字塔 打印空心菱形金字塔)
  3. div超出不换行_DIV元素不换行
  4. 3.10以上charles版本抓取Https数据包
  5. 调用线程必须为sta_Java手写分布式系统远程调用RPC框架
  6. mysql 实时性能_Mysql 实时查看性能
  7. android 行布局选择器,『自定义View实战』—— 银行种类选择器
  8. 一份完整的问卷模板_如何写出一份优秀的个人简历?
  9. Tomcat xxx unbound
  10. 想了解Xtrabackup备份原理和常见问题分析,看这篇就够了
  11. linux替换指定行指定列的内容,linux – sed替换特定行号的特定列号值
  12. USB HID学习:数据包分析
  13. 原生 遍历_迭代器模式统一集合的遍历方式
  14. raspberry ubuntu 修改源为清华_在Windows7基础上安装Ubuntu系统,实现双系统操作
  15. Mifare Classic Tool(MCT)汉化版
  16. LabVIEW编程LabVIEW开发 控制Keithley 2700例程与相关资料
  17. Apache Kylin PMC 马洪宾:开源,就是一场“螺旋上升”的旅程
  18. 郑捷《机器学习算法原理与编程实践》学习笔记(第三章 决策树的发展)(二)_C4.5...
  19. 按下键盘计算机具体发生了点儿啥?
  20. 给予Java初学者的学习路线建议

热门文章

  1. Ubuntu系统安装和运行n2n
  2. 断点续传续播的大概原理
  3. Alienware-17-R4-630-1060-MacOS 笔记本双显卡 外星人黑苹果hackintosh 10.15
  4. lvm扩容-缩减磁盘
  5. 教师信息管理c语言程序设计,信息技术教师招聘考试真题(附答案版)
  6. 湖南大学计算机博士好考吗,湖南大学最年轻的副教授是什么水平
  7. [OCCT] OCC官方示例介绍
  8. 测试局域网或wifi实际最大带宽
  9. 如何让计算机虚拟出多个桌面,多屏显示算什么?win10自带神技能,桌面秒变多屏幕,创建无上限...
  10. 物理学上四大神兽之拉普拉斯妖是指什么