代码如下,cal_point = False 不输出交点,cal_point = True 输出交点

def cross(p1,p2,p3):#跨立实验
    x1=p2.x-p1.x
    y1=p2.y-p1.y
    x2=p3.x-p1.x
    y2=p3.y-p1.y
    return x1*y2-x2*y1

def isIntersec(p1,p2,p3,p4,cal_point = False):
    # 判断两线段是否相交
    if(max(p1.x,p2.x)>=min(p3.x,p4.x)    #矩形1最右端大于矩形2最左端
    and max(p3.x,p4.x)>=min(p1.x,p2.x)   #矩形2最右端大于矩形最左端
    and max(p1.y,p2.y)>=min(p3.y,p4.y)   #矩形1最高端大于矩形最低端
    and max(p3.y,p4.y)>=min(p1.y,p2.y)): #矩形2最高端大于矩形最低端
        if(cross(p1,p2,p3)*cross(p1,p2,p4)<=0
           and cross(p3,p4,p1)*cross(p3,p4,p2)<=0):
            D=1
        else:
            D=0
    else:
        D=0
    if D:
        if cal_point:
            # 不同K值线段,求交点
            tmpLeft_x = (p4.x - p3.x) * (p1.y - p2.y) - (p2.x - p1.x) * (p3.y - p4.y)
            tmpLeft_y = (p1.x - p2.x) * (p4.y - p3.y) - (p2.y - p1.y) * (p3.x - p4.x)
            tmpRight_x = (p1.y - p3.y) * (p2.x - p1.x) * (p4.x - p3.x) + p3.x * (p4.y - p3.y) * (p2.x - p1.x) - p1.x * (p2.y - p1.y) * (p4.x - p3.x)
            tmpRight_y = p2.y * (p1.x - p2.x) * (p4.y - p3.y) + (p4.x - p2.x) * (p4.y - p3.y) * (p1.y - p2.y) - p4.y * (p3.x - p4.x) * (p2.y - p1.y)
            if tmpLeft_x != 0 and tmpLeft_y != 0:
                x = tmpRight_x / tmpLeft_x
                y = tmpRight_y / tmpLeft_y
                return D,(x,y)
            else:
                return D,(None,None)
        return D
    else:
        if cal_point:
            return D,(None,None)
        return D

python 求两线段是否相交,如果相交求交点相关推荐

  1. python判断两线段是否相交_c语言 判断两直线段是否相交

    转了多人的放到一起比较!! //功能:求点在有向直线左边还是右边 //返回:0共线.1左边.-1右边 intleft_right(pointa,pointb,doublex,doubley) { do ...

  2. matlab怎么求两个数的和,matlab怎么求出两个函数的交点

    matlab中,两个自变量的函数怎么求最大值(急!1) 需求:利用matlab求解二元函数y=f(x1,x2)=(339-0.01*x1-0.003*x2)*x1+(399-0.004*x1-0.01 ...

  3. C语言实现辗转相除法和更相减损法求两数最大公约数,及求最小公倍数的方法

    在学习从C语言过程中,我们会遇到一个题目,求两个整数的最大公约数,那么接下来分别介绍两种方法求最大公约数 1,辗转相除法 辗转相除法, 又名欧几里德算法(Euclidean Algorithm),是求 ...

  4. python求两数最大公因数_使用辗转相除法求两个数的最大公因数(python实现)

    数学背景: 整除的定义: 任给两个整数a,b,其中b≠0,如果存在一个整数q使得等式 a = bq 成立,我们就说是b整除a,记做b|a. 性质1:如果c|a,c|b,且对于任意的整数m,n,则有c| ...

  5. 计算空间中两线段之间的距离

    最近在建立气凝胶的有限元模型中需要计算每两根纤维(线段)之间的距离,最初参考的两篇文章确实提供了关于一些数值方法的计算思路(文章1 && 文章2),但忽略了线段距离问题的理论推导,导致 ...

  6. 嵌入式 ARM 汇编编程例题(二维数组按规律求和,求两数 gcd / lcm,求数组 min / max,字符串复制,排序)

    文章目录 0x00. 整数加减乘除 0x01. 一维数组按某种规律求和 0x01.1 求 1~100 之和 0x01.2. 求一维数组的和 0x01.2. 求一维数组的所有奇数的和 0x02. 二维数 ...

  7. java 平均值_Java求两个数平均值

    如何正确的求2个数的平均值.在练习算法二分查找的时候发现的,以前没有注意到的bug 备注:数据以int类型为例 一.以前的通用写法 /** * 求a+b平均值 * @param a * @param ...

  8. 判断两线段是否相交,并求交点

    首先, 上个示意图. 根据图示, 线段a表示为端点a1和a2, 线段b表示为端点b1和b2. 为了利用向量的叉乘关系, 将线段的端点看成四个向量, 下面用粗体表示向量. 根据向量运算可知 a=a2-a ...

  9. 求两个相交的线性函数的交点的Python程序

    分别已知两个函数上的两个不同的点,求两个线性函数的交点 from sympy import * x = symbols('x') #求两个函数的交点 x1 = 1 x2 = -2 #第一个函数过的两点 ...

最新文章

  1. iOS学习笔记14-网络(三)WebView
  2. react gps坐标转换_手持GPS的三参数计算方法
  3. BZOJ4196: [Noi2015]软件包管理器 (好题
  4. ITK:将图像传递给函数
  5. window10下搭建汇编环境(软件+资料)
  6. C#静态类,静态构造函数,静态变量
  7. spring-AspectJ异常通知
  8. COM 组件创建实例失败,原因是出现以下错误: 8001010a解决办法
  9. linux usb 存储设备,找到哪个驱动器对应于Linux中的哪个USB大容量存储设备
  10. ipv6是什么?ipv6怎么设置?
  11. ORACLE RAC 一节点出现Suspending MMON slave action kewrmrfsa_ for 82800 seconds
  12. 软件测试需要会python吗_真实揭秘90后职业新选择:25岁刚入行软件测试,竟拿到这么多薪资……...
  13. 男儿当杀人!!!!(诗一首)
  14. ArcGIS地理标记照片转点
  15. Unknown column 'JOIN.id' in 'order clause'和 Unknown column 'XXXX.id' in 'order clause'的解决办法
  16. 常用函数+星期+月份+缩写+四季
  17. 使用vue-lunar-full-calendar插件展示带有农历和节假日的日历
  18. 2020 CES:美团和法雷奥合作无人配送车
  19. 智能泊车进入「搭载率」攀升期,年度竞争力TOP10供应商榜单发布
  20. MyEclipse10 + Axis2 开发webservice

热门文章

  1. 应届生求职经历-一路坎坷
  2. 技术分析:苹果之后 HTML5将改变移动互联网
  3. 腾讯汤道生:未来将投入100亿资源为中小企业提供SaaS产品及方案
  4. WS小世界网络的仿真实现
  5. C# 使用ToolTip控件实现气泡消息提示
  6. 引爆全球 新华三首款MANO亮相英特尔网络“航展”
  7. 关于Windows7 64位系统下regsvr32执行报错的解决方案
  8. 是否对纯色背景的IDE感到乏味?那就让vscode背景变成你想要的样子
  9. linux域名通过代理,Haproxy根据域名匹配后端服务器
  10. 网络中数据传输过程的解析