一种计算两直线交点的方法

写在前面:

文章转载请注明出处,谢谢!

 

对于计算四个点表达的两条直线交点这个问题其实网上相应的代码与数学模型比较好找,所以这里无法保证提供的思路就是最正确或效率最高的,如果能帮助到你那真的是万分荣幸

 

正文:

首先确定其中一条直线的表达方式

假设两点分别为:p1(x1,y1), p2(x2,y2)

 

思路一:

设想直线方程表达式为 y = kx + b

根据给定两点 x1 , y1 求出直线斜率k,再将k带入一般式 y=kx + b 求出 b ,这样表达其中的一条直线,再对 x2,y2 使用同样的方法求出另一条直线

 

思路二:

设想直线方程表达式为 Ax + by + C = 0

其中:

A = p2.y - p1.y

B = p2.x - p1.x

C = p2.x * p1.y - p2.y * p1.x

习惯上会对ABC进行normalize处理,因为AB其实为该直线的法线向量,即n = (A,B)为直线Ax + by + C = 0 的法线向量

normalize具体过程其实就是该直线法向量单位化的过程:n/|n|

对于直线Ax + by + C = 0来说,法线向量的模 D = √(A*A + B*B)

最终我们得到的直线方程为: lineFunc = {A:A/D, B: B/D, C: C/D}

 

好了,到这里直线的表达方式和需要填充的参数已经填充完毕。接下来是交点的计算(此处不再赘述推导过程):

 

对于思路一:

y = k1 * x + b1

y = k2 * x + b2

其中k和b都为已知变量,交点即为二元一次方程组的解

此处需要注意的是,斜截式表达直线的时候,当直线为垂直于x轴的直线时需要进行特殊的判断和处理

 

对于思路二:

A1 * x + B1* Y + C1 = 0

A2 * x + B2* Y + C2 = 0

D = A1 * B2 - A2 * B1

这里的D可以表达两条直线的位置关系,当D = -1的时候表示两条直线垂直,当D = 0的时候表示两条直线平行或共线

接下来交点为:

p.x = (B1 * C2 - B2 * C1)/ D

p.y = (C1 * A2 - C2 * A1)/ D

那么问题来了,既然上文提到过D可以为0,当D = 0的情况出现的时会导致p的xy取值为无穷,这显然是错误的

所以用一般式表达直线时,当D = 0的时候要进行特殊的处理和判断,此时两直线位置关系为平行或共线

转载于:https://www.cnblogs.com/lingge1992/p/6738487.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值