Python 如何使用numpy.linalg.solve给定点坐标查找两条直线相交的位置?

Python 如何使用numpy.linalg.solve给定点坐标查找两条直线相交的位置?,python,numpy,linear-algebra,Python,Numpy,Linear Algebra,所以我尝试使用numpy.linalg.solve来找到两条线相交的地方,只使用一些端点坐标。如果一条直线的坐标为:x1、y1、x2、y2。我试过: 将numpy作为np导入 a=np.数组[[y2-y1],[x1-x2]] b=np.数组[x1*y2-y1*x2] np.linalg.solvea,b 但是,我认为公式不正确,它返回以下错误: numpy.linalg.linalgeror:数组的最后两个维度必须是正方形 所以我真的不知道该怎么办,有人能帮我吗?下面给出了关于这个问题背后的方程

所以我尝试使用numpy.linalg.solve来找到两条线相交的地方,只使用一些端点坐标。如果一条直线的坐标为:x1、y1、x2、y2。我试过:

将numpy作为np导入 a=np.数组[[y2-y1],[x1-x2]] b=np.数组[x1*y2-y1*x2] np.linalg.solvea,b 但是,我认为公式不正确,它返回以下错误:

numpy.linalg.linalgeror:数组的最后两个维度必须是正方形 所以我真的不知道该怎么办,有人能帮我吗?

下面给出了关于这个问题背后的方程式的清晰解释,以及基于克拉默规则和行列式的众所周知的分析解决方案,可以构造一个简单的线性系统a x=b,以便按照要求使用:

import numpy as np

# Given these endpoints coordinates
# Line 1 passing through points p1 (x1,y1) and p2 (x2,y2)
p1 = [0, 0]
p2 = [1, 1]

# Line 2 passing through points p3 (x3,y3) and p4 (x4,y4)
p3 = [0, 1]
p4 = [1, 0]

# Line 1 dy, dx and determinant
a11 = (p1[1] - p2[1])
a12 = (p2[0] - p1[0])
b1 = (p1[0]*p2[1] - p2[0]*p1[1])

# Line 2 dy, dx and determinant
a21 = (p3[1] - p4[1])
a22 = (p4[0] - p3[0])
b2 = (p3[0]*p4[1] - p4[0]*p3[1])

# Construction of the linear system
# coefficient matrix
A = np.array([[a11, a12],
              [a21, a22]])

# right hand side vector
b = -np.array([b1,
               b2])
# solve
try:
    intersection_point = np.linalg.solve(A,b)
    print('Intersection point detected at:', intersection_point)
except np.linalg.LinAlgError:
    print('No single intersection point detected')
给出了这些给定点的预期输出:

>>> Intersection point detected at: [0.5 0.5]
下面给出了关于该问题背后的方程及其基于Cramer法则和行列式的众所周知的分析解决方案的明确解释,可以构造一个简单的线性系统a x=b,以便按要求使用:

import numpy as np

# Given these endpoints coordinates
# Line 1 passing through points p1 (x1,y1) and p2 (x2,y2)
p1 = [0, 0]
p2 = [1, 1]

# Line 2 passing through points p3 (x3,y3) and p4 (x4,y4)
p3 = [0, 1]
p4 = [1, 0]

# Line 1 dy, dx and determinant
a11 = (p1[1] - p2[1])
a12 = (p2[0] - p1[0])
b1 = (p1[0]*p2[1] - p2[0]*p1[1])

# Line 2 dy, dx and determinant
a21 = (p3[1] - p4[1])
a22 = (p4[0] - p3[0])
b2 = (p3[0]*p4[1] - p4[0]*p3[1])

# Construction of the linear system
# coefficient matrix
A = np.array([[a11, a12],
              [a21, a22]])

# right hand side vector
b = -np.array([b1,
               b2])
# solve
try:
    intersection_point = np.linalg.solve(A,b)
    print('Intersection point detected at:', intersection_point)
except np.linalg.LinAlgError:
    print('No single intersection point detected')
给出了这些给定点的预期输出:

>>> Intersection point detected at: [0.5 0.5]
我不确定您是否正确使用了np.linalg.solve。读取文档时,它说它接收一个矩阵和一个输出向量,然后解线性方程。如果我有一个矩阵a和一个向量b,我寻找满足a*x=b的向量x,那么解是np.linalg.solveA,b。我试着从你的解释中找出x1,y1,x2,y2的意思。请再解释一遍,更准确些。我不确定您是否正确使用了np.linalg.solve。读取文档时,它说它接收一个矩阵和一个输出向量,然后解线性方程。如果我有一个矩阵a和一个向量b,我寻找满足a*x=b的向量x,那么解是np.linalg.solveA,b。我试着从你的解释中找出x1,y1,x2,y2的意思。请再解释一遍,更准确些。