我是靠谱客的博主 愤怒世界,这篇文章主要介绍python3 题解(49 已知两直线求交点)两直线交点,现在分享给大家,希望可以做个参考。

两直线交点

【问题】两点确定一条直线。两直线只要不平行,就一定有唯一的交点。
请编程,输入两组两点的坐标,求这两条直线的交点坐标。

两点(x0,y0) (x1,y1) 所确定的直线形式为 ax + by = c
需要用点坐标来确定参数 a, b, c 的值。实际上有效的信息是两个值。因为上面的方程同时放大一定的倍数仍然成立。这样,(a,b,c)是一组解,不是一个。求出任意一个即可。

点坐标代入,解二元一次方程得:
a = y 1 − y 0 b = x 0 − x 1 c = x 0 y 1 − y 0 x 1 begin{aligned} &a = y_1 - y_0 \ &b = x_0 - x_1 \ &c = x_0 y_1 - y_0 x_1 end{aligned} a=y1y0b=x0x1c=x0y1y0x1
这样,两条直线分别求出了系数 a, b, c, 得方程组:
a 0 x + b 0 y = c 0 a 1 x + b 1 y = c 1 a_0 x + b_0 y = c_0 \ a_1 x + b_1 y = c_1 a0x+b0y=c0a1x+b1y=c1
可得解为:
dd = a0 * b1 - b0 * a1
若 dd 为0, 则线平行
否则有解: x = (c0 * b1 - b0 * c1) / dd, y = (a0 * c1 - c0 * a1) / dd

这基本上就是一个纯数学的问题,用哪种语言描述没多大不同。
以下是 python 的解法:

### 两直线求交点
def lineCrossLine(p1, p2, q1, q2):
def pointAndPointToLine(pt0, pt1): ## 由两点得直线的标准方程 ax+by=c
x0, y0 = pt0
x1, y1 = pt1
return (y1-y0, x0-x1, x0 * y1 - y0 * x1)
a0,b0,c0 = pointAndPointToLine(p1,p2)
a1,b1,c1 = pointAndPointToLine(q1,q2)
dd = a0 * b1 - a1 * b0
if abs(dd) < 1e-6: return None
return ((c0 * b1 - c1 * b0) / dd, (a0 * c1 - a1 * c0) / dd)
if __name__ == '__main__':
print(lineCrossLine((0,0),(1,1),(0,1),(1,0)))
print(lineCrossLine((0,2),(3,0),(0,1),(2,3)))
print(lineCrossLine((0,2),(0,2),(0,1),(2,3)))
print(lineCrossLine((0,2),(3,0),(0,4),(6,0)))
print(lineCrossLine((1,2),(3,5),(1,2),(7,4)))

实际上的无解有两种情况。

  1. 由两个点确定一条直线时,给定的两个点重合,导致求直线时,a,b,c 的值全为零。
  2. 两条直线平行

需要补基础的,可以看:小甲鱼pyhthon教程,Bilibili站上还有:[耿老师]小甲鱼python作业 解析系列,持续更新中。

最后

以上就是愤怒世界最近收集整理的关于python3 题解(49 已知两直线求交点)两直线交点的全部内容,更多相关python3内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(112)

评论列表共有 0 条评论

立即
投稿
返回
顶部