Python 寻找计算两条曲线之间距离的解决方案
我需要计算两条曲线之间的最小和最大距离(正常) i、 e.一条曲线上的点与另一条曲线上的点垂直。 到目前为止我所做的:Python 寻找计算两条曲线之间距离的解决方案,python,dataframe,numpy,Python,Dataframe,Numpy,我需要计算两条曲线之间的最小和最大距离(正常) i、 e.一条曲线上的点与另一条曲线上的点垂直。 到目前为止我所做的: from sympy import * from pandas import DataFrame init_printing(use_unicode=False, wrap_line=False) x = Symbol('x') F=x+1 #first curve G=x**2 #second curve #on the interval [1:5] My_list =n
from sympy import *
from pandas import DataFrame
init_printing(use_unicode=False, wrap_line=False)
x = Symbol('x')
F=x+1 #first curve
G=x**2 #second curve
#on the interval [1:5]
My_list =np.transpose( [np.arange(1, 5, 1)] )
df = DataFrame(My_list, columns=['x']) # x array to data frame
df['yF'] = df['x']+1 #adding first function
df['yG'] = df['x']** 2 #adding second function
df['r']= abs(df['yF']-df['yG']) #calculating distance
df.describe() #to look min-max
问题是:距离不是真正垂直于曲线的距离。。。解决方案看起来不是最优的。您没有找到垂直距离。您正在查找具有固定x值的y值的最小值。您的步骤需要如下所示:
import numpy as np
#Functions, d is the derivative
F = lambda x : x+1
dF = lambda x : np.ones(x.shape)
G = lambda x : x**2
dG = lambda x : 2*x
#Domain
X = np.arange(1,5,1)
#We calculate the distance from G to F
P_m = -1/dG(X) #Perpendicular slopes
P_b = X**2+0.5 #The y-intercept
C = (2*X**3-X)/(2*X+1) #The x-coor of the intersection
D = np.sqrt((X-C)**2+((P_m*X+P_b)-F(C))**2) #Distance
print(D.min())
#Now the other way (this way has two intersection points).
P_m = -1/dF(X) #The perpendicular slopes
P_b = 2*X+1 #The y-intercepts
C1 = 0.5*(-P_m+np.sqrt(P_m**2+4*P_b)) #First solution
C2 = 0.5*(-P_m-np.sqrt(P_m**2+4*P_b)) #Second solution
D1 = np.sqrt((X-C1)**2+((P_m*X+P_b)-G(C1))**2) #Euclidian distance to first solution
D2 = np.sqrt((X-C2)**2+((P_m*X+P_b)-G(C2))**2) #Euclidian distance to second solution
D = np.concatenate([D1,D2]) #Distance
print(D.min()) #Minimum distance
首先你需要学习数学,然后你可以编程。你能更详细地解释一下:'点X处Y=X+1的垂线是Y=-X+(2*X+1)。-你是如何计算的?这个‘P_m=-1/dG(X)’我想如果我们有F第一个函数和X的数组,我们可以计算垂直线的起点。然后我们有垂直线函数和第二个G函数。我们可以解这个方程组,并且在直线和G函数之间有交集。最后知道两点我们可以计算距离这是一个数学问题而不是堆栈溢出问题。通常,如果两条直线L1和L2以直角相交,且L1的坡度为m,则L2的坡度必须为-1/m。这是关于直线的已知事实,也是求曲线垂直度的基础。一般来说,对于任何曲线,Y=F(X),如果我们在曲线上固定一个点,Y=F(X),那么该点的垂线是Y-Y=(-1/dF(X))*(X-X)。这就是所谓的坡度截距公式(google it)。