zoukankan      html  css  js  c++  java
  • 编程求取直线一般式表达式,两直线交点

    背景介绍

      最近在水面无人艇(USV)模拟仿真中,用到了一些点和线的关系求解,本文主要讲述一下两点确认直线,点到直线距离,两条直线的交点等问题的解决方法,并给出python程序。部分内容非原创,文中给出链接,需要者可以参考。
      博客更新可参见github点线关系

    两点确定直线

    表达式定义

      空间直线的表达式有多种,比如一般式Ax+By+C=0、点斜式y-y0=k(x-x0)、截距式x/a+y/b=1、两点式:(y-y1)/(y1-y2)=(x-x1)/(x1-x2)等,它们具有彼此的约束条件,如下所示。
    直线方程的表达式
      由上可以看出来,一般式的适用范围最广,不需要单独做处理和判断,所以在计算机领域处理二维图像数据中一般式用的最多。
      已知直线上的两点P1(X1,Y1)和P2(X2,Y2),P1和P2两点不重合,对于AX+BY+C=0,则有:

    • A=Y2-Y1
    • B=X1-X2
    • C=X2*Y1-X1*Y2

      推导两点求直线的一般式方程的链接

    python源代码

    def GeneralEquation(first_x,first_y,second_x,second_y):
        # 一般式 Ax+By+C=0
        # from http://www.cnblogs.com/DHUtoBUAA/
        A=second_y-first_y
        B=first_x-second_x
        C=second_x*first_y-first_x*second_y
        return A,B,C
    

    点到直线距离

    表达式定义

      设直线L的方程为Ax+By+C=0,点P的坐标为(x0,y0),则点P到直线L的距离为:

    d=frac{left | A	imes x0+B	imes y0+C 
    ight |}{sqrt{A^{2}+B^{2}}}
    

      博客园对Markdown插入数学公式支持不友好,可以转移到看github点线关系查看最新版。如果有博客园数学公式插入方法,欢迎留言指教。

    两条直线的交点

    表达式定义

    数学定义
      在已知直线两点的情况下,利用上面的直线一般式可以求得直线的参数A、B和C,那么两条直线的一般式表达可以列成二元一次方程组,其解即为两条直线的交点坐标。注意处理两条直线平行的特殊情况。

      根据二元一次方程的解,假设两条直线的参数分别为A1,B1,C1和A2,B2,C2,那么两条直线的交点可以表示为:
    x=frac{C2	imes B1-C1	imes B2}{A1	imes B2-A2	imes B1}
    
    y=frac{C1	imes A2-C2	imes A1}{A1	imes B2-A2	imes B1}
    

    python源代码

    def GetIntersectPointofLines(x1,y1,x2,y2,x3,y3,x4,y4):
        # from http://www.cnblogs.com/DHUtoBUAA/
        A1,B1,C1=GeneralEquation(x1,y1,x2,y2)
        A2, B2, C2 = GeneralEquation(x3,y3,x4,y4)
        m=A1*B2-A2*B1
        if m==0:
            print("无交点")
        else:
            x=(C2*B1-C1*B2)/m
            y=(C1*A2-C2*A1)/m
        return x,y
    

      程序运行结果:两直线交点为x=32.857142857142854,y=65.71428571428571,符合数学计算。部分内容参考自两条线段是否相交,计算交点公式

  • 相关阅读:
    SNMP的安全隐患及对策
    jsp+servlet+Tomcat+mysql实现用户注册、登录、查看、修改实例之——信息修改
    jsp+servlet+Tomcat+mysql实现用户注册、登录、查看、修改实例之——信息查看
    jsp+servlet+Tomcat+mysql实现用户注册、登录、查看、修改实例之——用户删除
    多线程的陷阱
    安装部署FastDFS
    你的知识需要管理
    1、什么是接口测试
    2、接口测试流程
    软件测试生命周期
  • 原文地址:https://www.cnblogs.com/DHUtoBUAA/p/8057056.html
Copyright © 2011-2022 走看看