编程求取直线一般式表达式,两直线交点
时间:2022-05-03
本文章向大家介绍编程求取直线一般式表达式,两直线交点,主要内容包括背景介绍、两点确定直线、python源代码、点到直线距离、两条直线的交点、python源代码、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
背景介绍
最近在水面无人艇(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 | Atimes x0+Btimes y0+C right |}{sqrt{A^{2}+B^{2}}}
博客园对Markdown插入数学公式支持不友好,可以转移到看github点线关系查看最新版。如果有博客园数学公式插入方法,欢迎留言指教。
两条直线的交点
表达式定义
在已知直线两点的情况下,利用上面的直线一般式可以求得直线的参数A、B和C,那么两条直线的一般式表达可以列成二元一次方程组,其解即为两条直线的交点坐标。注意处理两条直线平行的特殊情况。
根据二元一次方程的解,假设两条直线的参数分别为A1,B1,C1和A2,B2,C2,那么两条直线的交点可以表示为:
x=frac{C2times B1-C1times B2}{A1times B2-A2times B1}
y=frac{C1times A2-C2times A1}{A1times B2-A2times 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,符合数学计算。部分内容参考自两条线段是否相交,计算交点公式。
- 如何使用Java连接Kerberos的Kafka
- 隐藏在Chrome插件商店中的恶魔——恶意插件User-Agent Swither分析
- 如何使用CDSW在CDH中分布式运行所有R代码
- 如何在CDH中使用HBase快照
- 中间件安全-Tomcat安全测试概要
- 如何在CDH集群使用HDFS快照
- Sentry赋予server1权限给hive以外用户时ACL不同步问题分析
- 如何使用Java连接Kerberos的HBase
- 香香的xss小记录(一)
- UAF Writeup - pwnable.kr
- 如何使用Nginx实现Impala负载均衡
- pwnhub年前最后一战——“血月归来”writeup
- MHN中心服务器搭建与树莓派蜜罐部署
- 如何在CDH中启用Spark Thrift
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 自定义个范围的x,y坐标(python画图)
- 5s!用浏览器打造一个开箱即用的Linux系统
- pandas、numpy功能整理,包括机器学习的部分库
- 全能型终端神器!好用、免费!
- 初试geopandas
- 要实现60FPS动画, 你需要了解这些
- 数论-素数
- 自动补全、回滚!介绍一款可视化 sql 诊断利器
- 深度学习-IMBD二分类问题
- 开源、强大的Linux服务器集群管理工具,比宝塔好用!
- 组合数学-抽屉原理
- 利用 Harbor 搭建企业级私有镜像仓库
- Redis-Java项目应用(Jedis、SpringBoot整合、工具类模板)
- 微软被指剽窃他人开源作品!作者被迫终止该项目
- 秋招系列 | 推荐岗史上最强面经来袭(上)